Re: [問題] 8051的問題.拜託高手幫忙 懸賞一千P幣
我寫一個P2每秒反相一次,若RS232有接收到任何字元,P3就會反相一次
你必須加上interrupt 4才會正常動作.
以下程式你參考一下吧,希望對你有幫助.
#include <reg52.h>
void RS232_AND_INT(void);
void delay1ms(unsigned int count);
int x50ms=20;
void main(void)
{
delay1ms(10);
RS232_AND_INT();
while(1);
}
void TIME0_INT(void) interrupt 1
{
x50ms--;
if(x50ms==0)
{
x50ms=20;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
P2=~P2;
}
TF0=0;
}
void RS232_AND_INT(void)
{
SCON=0x52;
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=256-(28800/9600);
TR0=1;
TR1=1;
ET0=1;
ES=1;
EA=1;
}
void RS232_INT(void) interrupt 4 //串列中斷產生中斷的時候P3閃爍一次
{
TI=0;
P3=~P3;
delay1ms(1000);
P3=~P3;
RI=0;
}
void delay1ms(unsigned int count)
{
int i,j;
for(i=0;i<count;i++)
for(j=0;j<122;j++);
}
※ 引述《sparc (......)》之銘言:
: ※ [本文轉錄自 C_and_CPP 看板]
: 作者: sparc (......) 看板: C_and_CPP
: 標題: [問題] 8051的問題.拜託高手幫忙 懸賞一千P幣
: 時間: Wed Nov 26 14:17:54 2008
: 新手程式遇到瓶頸 想請高手幫忙看一下
: 使用的裝置: 89s52
: 計時器:timer0
: baudrate產生器:timer3
: 想寫的東西:
: 讓P2所接的一排led會一秒閃爍一次
: 但如果使用者透過rs232以9600的速度傳送一個字元 則會立刻閃一次
: 遇到的問題:
: LED閃爍是沒有問題
: 但如果RS232接收到一字元 則LED會立刻會停止閃爍
: 驗證過的方式:
: 去掉rs232時 led會正確的閃爍
: 去掉timer0時 led也的確會因為收到一個字元而閃一次
: 可是加在一起就不行了
: 非常感謝
: 程式:
: unsigned char timer_count; //設定一秒
: unsigned long timer_second; //使用者輸入秒數
: char time_out; //timer out flag 0:時間未到 1:時間已到
: void timer0_initial(unsigned long temp); //initial timer 0 初始使用者設定秒數
: void timer0_start(void);
: void rs232_initial(void);
: void rs232_start(void);
: void main(void)
: {
: P2=0X00; //led燈
: while(1)
: {
: rs232_initial();
: time_out=0;
: timer0_initial(1);
: timer0_start();
: rs232_start();
: while(RI==0 && time_out==0);
: P2=~P2; //led閃爍
: }
: }
: void timer0_initial(unsigned long temp)
: {
: timer_second = temp;
: timer_count=20;
: time_out=0;
: EA=1;
: ET0=1;
: TMOD=0X01;
: TH0=(65536-50000)/256;
: TL0=(65536-50000)%256;
: TR0=0;
: }
: void timer0_start(void)
: {
: TR0=1;
: }
: void timer0_pause(void)
: {
: TR0=0;
: }
: void timer0_int(void) interrupt 1
: {
: if(timer_count<=1)
: {
: if(timer_second<=1)
: {
: time_out=1;
: timer0_pause();
: }
: else
: {
: timer_count=20;
: timer_second=timer_second-1;
: }
: }
: else timer_count=timer_count-1;
: TH0=(65536-50000)/256;
: TL0=(65536-50000)%256;
: }
: void rs232_initial(void)
: {
: TL2C=0XD8;
: TH2C=0XFF;
: TL2=0XD8;
: TH2=0XFF;
: T2CON=0X24;
: SCON=0X50;
: ES=0;
: RI=0;
: }
: void rs232_start(void)
: {
: RI=0;
: ES=1;
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.114.49
推
11/28 00:09, , 1F
11/28 00:09, 1F
推
11/28 23:19, , 2F
11/28 23:19, 2F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章