完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题 在同时使用串口一串口二和定时器0时遇到问题,定时器0无法正常进入中断,求问是哪里配置错了呢?
void InitUart1() //初始化串口1 { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x40; //定时器1时钟为Fosc,即1T AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xFA; //设定定时初值 TH1 = 0xFA; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 ES = 1; //Enable UART1 interrupt } //串口2初始化函数 void InitUart2(void) { AUXR &= 0xF7; //波特率不倍速 S2CON = 0x50; //8位数据,可变波特率 AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T BRT = 0xFA; //设定独立波特率发生器重装值 AUXR |= 0x10; //启动独立波特率发生器 IE2 = 0x01; //Enable UART2 interrupt } //定时器0初始化函数 void timer0Init(void) //1毫秒@22.1184MHz { AUXR |= 0x80; //定时器时钟1T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0x9A; //设置定时初值 TH0 = 0xA9; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } //系统初始化函数 void Sys_Init() { LED=LED_CLOSE; LCD_Init(); DelayMs(100); LCD_Clear(); DelayMs(100); LCD_Write_String(7,0,"OK"); InitUart1(); //初始化串口1 DelayMs(10); //该延时不可去掉,否则程序卡死 InitUart2(); //初始化串口2 DelayMs(10); //该延时不可去掉,否则程序卡死 Timer0Init(); EA=1; } 目前大致知道是AUXR和寄存器TMOD配置有问题,可能是出在那个 TMOD &= 0x0F; 和AUXR &= 0xF7; 但是不知道怎么配置才是正确的 |
|
相关推荐
4个回答
|
|
|
|
定时器0和定时器1分别用于产生两个串口的波特率了,不能再他用,目测你的单片机还有定时器2,用定时器2去做你想实现的功能吧
|
|
|
|
你俩串口波特率是一样的,可以用一个定时器来产生,另外,你用了独立波特率发生器,这个不是所有单片机都有的,有T2的就没有它,T2可以同时给多个串口做波特率发生器。
|
|
|
|
你没有开启T0中断允许开关,详细内容建议阅读《51单片机轻松入门 基于STC15W4K系列》,通过这本书一次性学透彻后使用起来就得心应手了。
|
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1124浏览 3评论
578浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
572浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1863浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 02:12 , Processed in 1.256509 second(s), Total 86, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号