① 51單片機串口通訊,怎麼發送數據串口調試精靈收不到啊
真的很濫。這是一個發I Like You!的程序,簡單實用。
沒用中斷,
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar idata w[]="I Like You! "; //數據定義
void delay(uchar);
void main(void)
{
uchar count;
TMOD=0X20; //工作在方式2
TL1=0xfd; //T1波特率9600bps
TH1=0xfd; //串列工作在方式3
SCON=0xd8;
TR1=1; //啟動T1
while(1)
{
count=0;
while(*(w+count)) //判斷一串數據是否結束
{
SBUF=*(w+count); //發送數據
while(TI==0); //查詢發送是否結束
TI=0; //清除發送一標志位
count++; //准備發送一個數據
}
delay(100);
}
}
void delay(uchar times) //延時子程序
{
uchar i;
while(times--);
for(i=0;i<120;i++){}
}
② 51單片機的外部中斷的程序怎麼弄啊
在編程時,為了實現定時器0的中斷功能,可以參考以下代碼:
void intTIME0 (void) {
TMOD = 0x01; // 設置定時器方式為1
TL0 = (65536-50000) % 256; // 設置定時器初值
TH0 = (65536-50000) / 256;
ET0 = 1; // 開啟定時器中斷
EA = 1; // 開啟總中斷
TR0 = 1; // 啟動定時器計數
}
接下來,實現定時器0的中斷處理函數如下:
void tm0_isr() interrupt 1 using 1 {
// 這里可以加入自己的代碼
}
需要注意的是,interrupt 1中的1代表中斷號1,如果使用的是外部中斷0,則使用interrupt 0;如果是外部中斷1,則使用interrupt 2;如果需要處理定時器1中斷,則使用interrupt 3;而串口中斷則使用interrupt 4。
在tm0_isr()函數中,可以根據具體需求添加相應的代碼邏輯,例如處理定時器超時、執行特定任務等。
通過以上代碼,可以實現定時器0的初始化和中斷處理,進一步提升程序的功能性和實用性。