找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4141|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

[求助]定時(shí)器程序的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:23515 發(fā)表于 2013-4-13 19:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

定時(shí)器T1做波特率發(fā)生器,(12M晶體,4800波特率),定時(shí)器T0定時(shí)100um中斷,變量tjs加1,tjs 累計(jì)到1000時(shí),用串口向PC 發(fā)送一個(gè)字符‘A’,tjs 累計(jì)到5000(0.5秒)時(shí),P01反轉(zhuǎn)一次(即取反),同時(shí)tjs=0。
 如何編寫正確的C 程序?

 下面是我寫的,驗(yàn)證失敗。

 

//定時(shí)器T1做波特率發(fā)生器,(12M晶體,4800波特率),定時(shí)器T0定時(shí)100um中斷,變量tjs加1,
//tjs 累計(jì)到1000時(shí),用串口向PC 發(fā)送一個(gè)字符‘A’,tjs 累計(jì)到5000時(shí),P01反轉(zhuǎn)一次(即取反)。
#include <stc89.h>
#define uchar unsigned char
#define uint  unsigned int
uint tjs;

void init_time()//定時(shí)器模式初始化
{
EA=1;  //開(kāi)總中斷
TMOD=0x02;//設(shè)定時(shí)器0模式2定時(shí) 100um
TH0=TL0=155;//置定時(shí)器0初值,中斷后,TH0中的值重新裝入TL0,THO中值不變
TR0=0; //啟動(dòng)定時(shí)器0
ET0=1; //允許T0中斷
SCON =0x50 ;  //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |=0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
PCON |=0x80 ; //SMOD=1;
IE |=0x10;   //串行口中斷 (IE |=0x10;)開(kāi)啟  (IE &=0xEF;)關(guān)閉
TH1 =0xf3 ;   //晶振=12MHz波特率4800
}
/////////////////////////////////////

void sendchar(uchar ch){
TR1=1;     //啟動(dòng)定時(shí)器1
ET1=1;   //允許T1中斷
TI=0;
P05=0;      
SBUF=ch;

while (TI==0);  //為什么會(huì)卡在這里?( P05腳的發(fā)光管一直亮。
TR1= 0 ;     ////啟動(dòng)定時(shí)器1
ET1=0;    //不允許T1中斷
P05=1;
//
}

//////////////////////////////
void main(void){
init_time();//初始化定時(shí)器
TR0=1; //啟動(dòng)定時(shí)器T0
while(1){

if(tjs==1000){sendchar('A');}
if(tjs==5000){P01=~P01; tjs=0;}
//if(tjs==5000)tjs=0;
} }

void t0_int(void) interrupt 1
{tjs++;}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:7485 發(fā)表于 2013-4-13 21:54 | 只看該作者
t0不能中斷。
回復(fù)

使用道具 舉報(bào)

板凳
ID:23515 發(fā)表于 2013-4-13 23:14 | 只看該作者
以下是引用ahshmj在2013-4-13 21:54:46的發(fā)言:
t0不能中斷。

while (TI==0);  //為什么會(huì)卡在這里?( P05腳的發(fā)光管一直亮。
 向PC 只發(fā)送一次,然后就卡在這里死機(jī)了

回復(fù)

使用道具 舉報(bào)

地板
ID:7485 發(fā)表于 2013-4-14 10:08 | 只看該作者

t0做波特率發(fā)生器用的時(shí)候,不能開(kāi)中斷。

由于你錯(cuò)誤的開(kāi)了中斷,所以就不能正確產(chǎn)生波特率。

所以就不能發(fā)送。

所以發(fā)送完成標(biāo)志TI就不會(huì)改變,

所以就“卡”在那兒了。

回復(fù)

使用道具 舉報(bào)

5#
ID:23515 發(fā)表于 2013-4-14 16:43 | 只看該作者
我那個(gè)程序,該如何改,才能正常工作?求你不吝賜教
回復(fù)

使用道具 舉報(bào)

6#
ID:23515 發(fā)表于 2013-4-21 15:19 | 只看該作者

謝謝你,我改用了T2,問(wèn)題解決。

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表