/***************************************************************
*在单片机上模拟了一个串口,使用P2.1作为发送端
*把单片机中存放的数据通过P2.1作为串口TXD发送出去
*本程序来源于《单片机IO口模拟串口程序(发送+接收)》
*硬件环境:11.0592MHz, TXD P2.1
***************************************************************/
#include #include #include typedef unsigned char uchar; int i; uchar code info[] = { 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15 }; sbit newTXD = P2^1; //模拟串口的发送端设为P2.1 void UartInit() { SCON = 0x50; // SCON: serail mode 1, 8-bit UART TMOD |= 0x21; // T0工作在方式1,十六位定时 PCON |= 0x80; // SMOD=1; TH0 = 0xFE; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz // TH0 = 0xFD; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz // TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz } void WaitTF0(void) { while(!TF0); TF0=0; TH0=0xFE; // 定时器重装初值 fosc=11.0592MHz TL0=0x7F; // 定时器重装初值 fosc=11.0592MHz // TH0 = 0xFD; // 定时器重装初值 fosc=18.432MHz // TL0 = 0x7F; // 定时器重装初值 fosc=18.432MHz } void WByte(uchar input) { //发送启始位 uchar j=8; TR0=1; newTXD=(bit)0; WaitTF0(); //发送8位数据位 while(j--) { newTXD=(bit)(input&0x01); //先传低位 WaitTF0(); input=input>>1; } //发送校验位(无) //发送结束位 newTXD=(bit)1; WaitTF0(); TR0=0; } void Sendata() { for(i=0;i WByte(info[i]); } } void main() { UartInit(); Sendata(); while(1) {;} } 附抓取到的波形: PC端接收到单片机发来的字符 看看波形,仔细数数1、2、3 放大看一看,哪个是起始位,哪个是8位数据位,哪个是停止位
上一篇:51单片机IO口模拟串口通讯6
下一篇:51单片机IO口模拟串口通讯4
推荐阅读最新更新时间:2024-11-06 15:29
设计资源 培训 开发板 精华推荐
- CM6631A USB界面卡
- ws2812多尺寸重绘版灯板(Awtrix用)
- DER-508 - 4.75 W 双输出电源
- XPC563MADPT176S、XPC563MKIT 评估系统支持Freescale MPC563xM MCU
- MIKROE-3299,Knob G Click Board 具有 PCA9956B 8 位、24 通道、恒流 LED 驱动器
- 使用 Diodes Incorporated 的 AZ317L 的参考设计
- LT1172HVIQ、1.25A 背光 CCFL 电源的典型应用
- AC-DC & AP3041升压转换器的应用电路LED背光,二合一解决方案
- LT3485 的典型应用 - 具有输出电压监视器和集成 IGBT 驱动器的闪光灯电容器充电器
- LTC2263-12、12 位、25Msps 低功耗双通道 ADC 的典型应用