熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2017-4-22 00:42
正文摘要:目的是按左邊單片機(jī)上的按鈕來(lái)控制右邊的燈泡亮,左邊的單片機(jī)的程序是這樣的: #include<reg51.h> #include<intrins.h> unsigned char a; void main() { a=0xfe; EA=1; ES=1; EX0=1; IT0=1; TMO ... |
同求幫助 |
內(nèi)部定時(shí)器的設(shè)置問(wèn)題 |
bayga456 發(fā)表于 2017-4-22 09:43 謝謝,就是TR0的問(wèn)題! |
左邊的單片機(jī)的程序是這樣的: #include<reg51.h> #define uchar unsigned char sbit key=P1^0; //定義按鍵所在端口 uchar a; //定義變量a 存放要發(fā)送的數(shù)據(jù) void Init_UART() //串口初始化 12T/定時(shí)器1作波特率發(fā)生器 { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位數(shù)據(jù),可變波特率 AUXR &= 0xBF; //定時(shí)器1時(shí)鐘為Fosc/12,即12T AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器 TMOD &= 0x0F; //清除定時(shí)器1模式位 TMOD |= 0x20; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式 TL1=TH1=xxxx; //設(shè)定定時(shí)初值 (你自己定義波特率) ET1 = 0; //禁止定時(shí)器1中斷 TR1 = 1; //啟動(dòng)定時(shí)器1 ES=1; //開(kāi)串口中斷 } void delay() //延時(shí)程序 自己寫(xiě) 20ms夠了 { //............... } void main() { Init_UART(); //初始化UART a=0xfe; //賦值 要發(fā)送的數(shù)據(jù) while(1) //主循環(huán) { if(key==0) //如果 按鍵按下 { delay(); //防抖 if(key==0) //如果按鍵依舊按下 { while(!TI); //等到按鍵釋放才動(dòng)作 SBUF=a; //給串口緩沖區(qū)傳送數(shù)據(jù) while(!TI); //等待發(fā)送標(biāo)記 } } } } 右邊的單片機(jī)的程序是這樣的: #include<reg51.h> #include<intrins.h> #define uchar unsigned char uchar b=0; //定義變量b 存放收到的數(shù)據(jù) bit flag_uart=0; //定義標(biāo)記 是否接收到數(shù)據(jù) void Init_UART() //串口初始化 12T/定時(shí)器1作波特率發(fā)生器 { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位數(shù)據(jù),可變波特率 AUXR &= 0xBF; //定時(shí)器1時(shí)鐘為Fosc/12,即12T AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器 TMOD &= 0x0F; //清除定時(shí)器1模式位 TMOD |= 0x20; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式 TL1=TH1=xxxx; //設(shè)定定時(shí)初值 (你自己定義波特率 和發(fā)送的一樣) ET1 = 0; //禁止定時(shí)器1中斷 TR1 = 1; //啟動(dòng)定時(shí)器1 ES=1; //開(kāi)串口中斷 } void Server_UART() interrupt 4 //中斷4 服務(wù) { TI=0; //發(fā)送標(biāo)志位 TI置0 if(RI==1) //如果接收位1 有數(shù)據(jù)接收 { RI=0; //清除接收標(biāo)志 硬件可以接收數(shù)據(jù) b=SBUF; //從接收緩沖區(qū)SBUF讀取數(shù)據(jù)到數(shù)據(jù)緩沖區(qū)RX flag_uart=1; //接收標(biāo)記置1 收到數(shù)據(jù) } } void main() { P1=0x00; //顯示端口清零 Init_UART(); //串口初始化 while(1) //主循環(huán) { if(flag_uart==1) //如果 接收標(biāo)記為1 收到數(shù)據(jù) { flag_uart=0; //接收標(biāo)記清零 可以再次接收 P1=b; //賦值 P1端口值為收到的數(shù)據(jù) } } } |
把程序的TR0=1;改為T(mén)R1=1;試試 |
TR0=1;改為T(mén)R1=1;試試,c51用TR1的溢出率,不是TR0 |
昨天看到了類(lèi)似的問(wèn)題,你仿真圖里的單片機(jī)晶振頻率設(shè)置的是多少,12MHz? |
Powered by 單片機(jī)教程網(wǎng)