//串列埠0的設定,用定時器2
t2con=0x30; //用定時器2做串列埠0的波特率發生器
//參考
rcap2h=(65536-22118400/baud_rate/32)/256; // 22.1184m晶振下,baud rate=19200
rcap2l=(65536-22118400/baud_rate/32)%256;
// scon=0x50; //串列埠0,工作在模式3m0=1 sm1=1 在11位非同步收發模式,接收允許
scon=0xdc;
tr2=1; //定時器2開始 //baut=f/
// ea=0; 所有中斷源的總允許位
es=0; //串列埠中斷允許位
re1=0; //sbit re1=p1^7;
/// // ri=0; //接收中斷標誌位
//定時器0設定定時10ms
//tmod=0x01;//t0做定時器,工作模式選擇模式1:16位定時器,無預分頻
//由於51微控制器1個機器週期等於12個時鐘週期。t=1/6mhz*12=2us,
//即乙個機器週期是2us。沒有預分頻如果要定時10ms則需要10ms/2us=5000次計數
tmod|=0x01; //t0定時 16位,tr0控制
tl0=0x00;
th0=0xb8;
tr0=1; //開啟定時器0
et0=1; //t0中斷開
ea=1; //開啟總中斷
sbuf=0x01; //address
while(!ti); //ti傳送標誌位 等待串列埠傳送完成 傳送完成ti值為1 相當於while(ti==0);
//(未完成ti值為0,(!ti)值為1,迴圈,直到串列埠傳送完成,ti為1,(!ti)值為0,退出迴圈,向下執行)
ti = 0;
/*而當本微控制器送出資料時就要看傳送標誌位ti了,
當傳送完成後ti==1,while(ti==0) ti=0;
這兩句就是當沒有傳送時就一直執行while(ti==0)這條語句,
而當有傳送時ti==1所以就不執行這條語句而轉到執行ti=0這條來,
因為採用那個查詢方式時,當傳送完成後必須要手動使ti=0,
否則微控制器將無法進行下次傳送,因為ti==1微控制器就預設為傳送一直進行中。
*/buffer[0]=sbuf; //接收addr
//當傳送sbuf裡有資料時串列埠就會把資料序列送出;
//當串列埠接收到資料時就會把序列資料轉成並行資料存在接收sbuf裡。
tb8=0; //tb8:第9位傳送的資料,多機通訊時(方式2、方式3)tb8標明主機傳送的是位址還是資料,
//tb8=0為資料,tb8=1為位址。tb8由指令置位或復位。
tb8:第9位傳送的資料,多機通訊時(方式2、方式3)tb8標明主機傳送的是位址還是資料,tb8=0為資料,tb8=1為位址。tb8由指令置位或復位。
方式2和方式3用於多機通訊,方式1和方式0用於點對點的通訊,因為方式2和方式3中每幀資料有第9位,在通訊時候,主機先傳送乙個位址資訊給從機,從機接收到位址資訊然後和自己的位址對比,位址相同則認為主機要同自己通訊,
就是當序列口工作在方式2,和方式3時候,每幀資料一共有9位,前面8位為傳送的資料位,最後面第9位標明的是傳送過來的資料是傳送的位址資訊還是傳送的資料資訊,當傳送的為位址資訊的時候寫程式的時候將tb8置1,當傳送的資料為資料資訊的時候將tb8置0.就是用第9位來讓微控制器識別傳送的資訊型別。
51微控制器 定時器
定時 計數器的結構和工作原理 定時 計數器的實質是加1計數器 16位 由高8位和低8位兩個暫存器組成。80c51 微控制器定時 計數器的工作是由兩個特殊功能暫存器控制的。tmod是定時 計數器的工 作方式暫存器,確定工作方式和功能,低四位用於t0,高四位用於t1。t con是控制寄 存器,控制t0和...
51微控制器 定時器
標準的51微控制器內部有t0和t1兩個定時器。定時器的計數值儲存在暫存器中。th0 tl0用於t0,th1 tl1用於t1.定時器儲存暫存器 名稱描述 sfr位址 復位值th0 t0高位元組 0x8c 0x00 tl0t0低位元組 0x8a 0x00 th1t1高位元組 0x8d 0x00 tl1t...
51微控制器定時器 彙編
定時器控制流水燈的速度,但流水燈到邊緣的時候,自動調整方向,先反方向繼續流動 使用的是 定時器0 org 0000h ljmp mian org 000bh ljmp t0 break org 0200h init mov tmod,01h 定時器0為方式1 定時器0計時100us mov tl0,...