找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3557|回复: 5
打印 上一主题 下一主题
收起左侧

[求助]定时器程序的问题

[复制链接]
跳转到指定楼层
楼主
ID:23515 发表于 2013-4-13 19:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

定时器T1做波特率发生器,(12M晶体,4800波特率),定时器T0定时100um中断,变量tjs加1,tjs 累计到1000时,用串口向PC 发送一个字符‘A’,tjs 累计到5000(0.5秒)时,P01反转一次(即取反),同时tjs=0。
 如何编写正确的C 程序

 下面是我写的,验证失败。

 

//定时器T1做波特率发生器,(12M晶体,4800波特率),定时器T0定时100um中断,变量tjs加1,
//tjs 累计到1000时,用串口向PC 发送一个字符‘A’,tjs 累计到5000时,P01反转一次(即取反)。
#include <stc89.h>
#define uchar unsigned char
#define uint  unsigned int
uint tjs;

void init_time()//定时器模式初始化
{
EA=1;  //开总中断
TMOD=0x02;//设定时器0模式2定时 100um
TH0=TL0=155;//置定时器0初值,中断后,TH0中的值重新装入TL0,THO中值不变
TR0=0; //启动定时器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;)开启  (IE &=0xEF;)关闭
TH1 =0xf3 ;   //晶振=12MHz波特率4800
}
/////////////////////////////////////

void sendchar(uchar ch){
TR1=1;     //启动定时器1
ET1=1;   //允许T1中断
TI=0;
P05=0;      
SBUF=ch;

while (TI==0);  //为什么会卡在这里?( P05脚的发光管一直亮!)
TR1= 0 ;     ////启动定时器1
ET1=0;    //不允许T1中断
P05=1;
//
}

//////////////////////////////
void main(void){
init_time();//初始化定时器
TR0=1; //启动定时器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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2013-4-13 21:54 | 只看该作者
t0不能中断。
回复

使用道具 举报

板凳
ID:23515 发表于 2013-4-13 23:14 | 只看该作者
以下是引用ahshmj在2013-4-13 21:54:46的发言:
t0不能中断。

while (TI==0);  //为什么会卡在这里?( P05脚的发光管一直亮!)
 向PC 只发送一次,然后就卡在这里死机了

回复

使用道具 举报

地板
ID:7485 发表于 2013-4-14 10:08 | 只看该作者

t0做波特率发生器用的时候,不能开中断。

由于你错误的开了中断,所以就不能正确产生波特率。

所以就不能发送。

所以发送完成标志TI就不会改变,

所以就“卡”在那儿了。

回复

使用道具 举报

5#
ID:23515 发表于 2013-4-14 16:43 | 只看该作者
我那个程序,该如何改,才能正常工作?求你不吝赐教
回复

使用道具 举报

6#
ID:23515 发表于 2013-4-21 15:19 | 只看该作者

谢谢你,我改用了T2,问题解决。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表