历史上的今天
今天是:2025年03月06日(星期四)
2020年03月06日 | 51单片机-串口-串口发送显示
2020-03-06 来源:eefocus
1. 视频
bilibili视频地址:
https://www.bilibili.com/video/av92932152
51单片机-串口-串口发送显示
2. 文件
文件下载链接:
https://download.csdn.net/download/weixin_43130546/12203484
3. 串口
PCON电源管理寄存器
SCON串口控制寄存器
模式&波特率(宋雪松P183)
SCON主要用模式1,的波特率
对应的,要用定时器T1&T2的模式2
TH1 = TL1 = 256 - 晶振值/12/2/16/波特率
(256是TL1的溢出值,12指12个时钟周期,16是硬件因素)
SBUF
两个SBUF寄存器,分别负责接收和发送缓冲
4. 串口配置代码
EA = 1;
void ConfigUART(unsigned long baud)
{
TH1 = 256 - (11059200 / 12 / 32) / baud;
TL1 = TH1;
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
ET1 = 0;
ES = 1;
TF1 = 0;
TR1 = 1;
}
void InterruptUART(void) interrupt 4
{
if(RI)
{
RI = 0;
UARTNum = SBUF;
SBUF = UARTNum;
}
if(TI)
{
TI = 0;
}
}
5. 例程代码
串口助手发送0xXX,在单片机数码管上以十进制&十六进制显示
#include sbit DULA = P2^6; sbit WELA = P2^7; unsigned char code DUTable[16] = { 0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C, 0x39,0x5E,0x79,0x71 }; unsigned char code WETable[8] = { ~0x80,~0x40,~0x20,~0x10, ~0x08,~0x04,~0x02,~0x01 }; unsigned char LedBuff[8] = { 0x3F,0x3F,0x3F,0X40, 0X3F,0X3F,0X08,0X3F }; unsigned char T0RH,T0RL; unsigned char UARTNum; void ConfigTimer0(unsigned char ms); void ConfigUART(unsigned long band); void ShowNum(unsigned char num); void main(void) { EA = 1; ConfigTimer0(1); ConfigUART(9600); while(1) { ShowNum(UARTNum); } } void ConfigTimer0(unsigned char ms) { unsigned long tmp; tmp = 11059200 / 12; tmp = tmp * ms / 1000; tmp = 65536 - tmp; tmp += 12; T0RH = (unsigned char)(tmp>>8); T0RL = (unsigned char)tmp; TH0 = T0RH; TL0 = T0RL; TMOD &= 0xF0; TMOD |= 0x01; ET0 = 1; TF0 = 0; TR0 = 1; } void ConfigUART(unsigned long baud) { TH1 = 256 - (11059200 / 12 / 32) / baud; TL1 = TH1; SCON = 0x50; TMOD &= 0x0F; TMOD |= 0x20; ET1 = 0; ES = 1; TF1 = 0; TR1 = 1; } void ShowNum(unsigned char num) { LedBuff[0] = DUTable[num/1%10]; LedBuff[1] = DUTable[num/10%10]; LedBuff[2] = DUTable[num/100%10]; LedBuff[3] = 0x40; LedBuff[4] = DUTable[num & 0x0F]; LedBuff[5] = DUTable[num >> 4]; LedBuff[6] = 0x08; LedBuff[7] = 0x3F; } void LedScan(void) { static unsigned char i = 0; P0 = 0x00; DULA = 1; DULA = 0; P0 = WETable[i]; WELA = 1; WELA = 0; P0 = LedBuff[i]; DULA = 1; DULA = 0; i++; i &= ~0xF8; } void InterruptTimer0(void) interrupt 1 { TH0 = T0RH; TL0 = T0RL; LedScan(); } void InterruptUART(void) interrupt 4 { if(RI) { RI = 0; UARTNum = SBUF; SBUF = UARTNum; } if(TI) { TI = 0; } }
上一篇:51单片机-指针方法-串口实例
下一篇:51单片机-计时器-倒计时闹钟
史海拾趣
|
KBDHID 键盘布局定制问题(USAGE-TO-SCANCODE) 在kbdhid.cpp文件下 有3个USAGE-TO-SCANCODE类型的数组,不清楚顺序是根据什么来的?请大家指点下… 查看全部问答> |
|
想把A主机显示的图像发送到B主机上,除了抓屏还有什么效率比较高的方法 如题,好多天了,没有找到比较好的解决方法。想从底层的驱动来考虑,不知道怎么弄,也没有驱动基础。大家给点建议,谢谢了… 查看全部问答> |
|
这是我的一些Xilinx的FPGA的论文,传上来给大家分享一下!大家多多支持啊! 我会分批上传,方便大家选择性的交流与下载! [ 本帖最后由 jjkwz 于 2011-11-16 17:08 编辑 ]… 查看全部问答> |
|
要求输出电压的范围为0V~9.9V,纹波不大于10mV,步进0.1v,输出电流大于500mA,能预制置输出初值,输出电压值由数码管显示。单片机选用51系列的。DA转换电路芯片网上看了下DAC0832最简单普遍。有朋友能指导我做下吗?… 查看全部问答> |
|
用ftp下载vxworks镜像到目标机的时候,网络有问题,求助各位前辈 通过ftp将vxworks镜像从PC机下到目标机的时候,是通过ftpXfer这个函数从PC机读取文件,每次读完镜像之后关闭套接字,但套接字指定的端口变成就会time_wait状态,就要等一段时间才能通过这个函数,从PC机再次通过ftp下载镜像,但这段时间有一分半钟 ...… 查看全部问答> |
|
求一个S3C2440 WINCE6.0 的BSP,我网上下载了一个 总是编译出错,哪位高人那里有通过编译的BSP,发我一份吧! 感激不尽! eyob@163.com … 查看全部问答> |




