久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機2個定時器開啟,串口中斷進不了是哪里占用了?
[打印本頁]
作者:
sr861126
時間:
2023-7-13 10:48
標(biāo)題:
單片機2個定時器開啟,串口中斷進不了是哪里占用了?
/********************************************************************
* 文件名 : 獨立按鍵.c
* 描述 : 該程序?qū)崿F(xiàn)獨立按鍵去控制 LED燈 的亮滅,并講訴了對按鍵的處理方法。
獨立按鍵相應(yīng)的IO口平時為高電平,一旦按鍵按下,單片機便檢測到低電平。
按下P3.2,P0.0口對應(yīng)的LED亮滅交替變化。
按下P3.3,P0.1口對應(yīng)的LED亮滅交替變化。
按下P3.4,P0.2口對應(yīng)的LED亮滅交替變化。
* 創(chuàng)建人 : 東流,2009年8月27日
* 版本號 : 1.0
***********************************************************************/
#include<reg52.h>
#include"lop.h"
#define uchar unsigned char
#define uint unsigned int
#define u8 unsigned char
#define u16 unsigned int
typedef u8 a;
sbit KEY1 = P1^2;
sbit KEY2 = P1^3;
sbit KEY3 = P1^4;
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED5 = P1^0;
sfr P4 =0Xe8;
sbit P4_0 = P4^0;
static u16 count;
char cost;
bit lixc=1;
sfr WDT_CONTR=0xe1; //1110 0001
//extern enu;
u8 cmd;
void KEY();
typedef struct
{
u8 i;
u8 *p;
}enu;
enu number;
/********************************************************************
* 名稱 : Delay()
* 功能 : 延時,延時時間為 10ms * del
* 輸入 : del
* 輸出 : 無
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++);
}
/********************************************************************
* 名稱 : Delay()
* 功能 : 實現(xiàn)按鍵功能,當(dāng)按鍵按下時,相應(yīng)的LED亮滅交替
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void KEY()
{
a i;
number.i=0;
// Delay(2);
if(KEY1==0 || KEY2==0 || KEY3==0)
{
Delay(5); //20毫秒軟件防抖
if(KEY1 == 0)
{
Delay(5);
// while(!KEY1);
// P4_0 = 0 ; //LED顯示取反
Delay(1);
++cost; SBUF= cost;
while(!TI);TI=0;
}
if(KEY2 == 0)
{
// P4_0 = 1;
--cost;
SBUF= cost;
while(!TI);TI=0;
}
else
{
LED3 = !LED3;
}
Delay(50); //延時0.5秒再進行下次按鍵的檢測
if(cost>=3)
{
lixc=0; P4_0=1;
}
else
lixc=1;
}
}
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
// // TMOD: timer 1, mode 2, 8-bit 重裝
TMOD |= 0x21;
TH1 = 0xFD; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz
TL1 = 0xFD; //波特率
TR1 = 1; // TR1: timer 1 打開
IE |= 0x92; //開啟中斷
EA = 1; //打開總中斷
ES = 1; //打開串口中斷
// SM0=0;
// SM1=1; //串口方式1
// REN=1; //允許接收
// PCON=0x00; //關(guān)倍頻
}
void Init_Timer1(void)
{
// TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
// TH0=0x0c; //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出
// TL0=0x0c;
// ET0=1; //定時器中斷打開
// TR0=1; //定時器開關(guān)打開
// EA=1; //總中斷打開
TMOD &= 0xf0; //定時器0
TMOD |= 0x01;
TH0 = (65536-2000)/256; //2ms溢出
TL0 = (65536-2000)%256;
}
void Init_Timer2(void)
{
// TMOD=0x21; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
TH1=(65536-50000)/256; //給TH1和初初值,由15536開始計數(shù),到65535溢出
TL1=(65536-50000)%256; //外部晶振為12MHz,對應(yīng)的延時時間為50ms
ET1=1; //定時器中斷打開
TR1=1; //定時器開關(guān)打開
EA=1; //總中斷打開
}
void timer0(void) interrupt 1
{
// TH0=0x00; //重新賦值
// TL0=0x00;
TH0 = 0xDC; //10MS
TL0 = 0x00;
if(count>100&&lixc==1)
{
count=0;
P4_0 =!P4_0 ;
}
count++;
// if(count>=15)
// {
// count=0;
// WDT_CONTR|=0x10; // 00010000 || 1110 0001
// }
}
void timer1(void) interrupt 3 using 1
{
// TH1=(65536-50000)/256; //給TH1和初初值,由15536開始計數(shù),到65535溢出
// TL1=(65536-50000)%256; //外部晶振為12MHz,對應(yīng)的延時時間為50ms
TH1 = 0xDC; //10MS
TL1 = 0x00;
if(cmd>150)
{
cmd=0;
LED5 =!LED5 ;
}
cmd++;
}
void ET0_init()//定時器0初始化
{
EA=1; //打開總中斷
TR0=1; //打開定時器0中斷
ET0=1; //啟動定時器0中斷
TH0=(65536-50000)/256;//無腦賦值 相當(dāng)于50毫秒進入一次中斷函數(shù),20次就是1秒
TL0=(65536-50000)%256; //無腦賦值
TMOD= 0x01;//設(shè)置定時器t0的工作方式
}
void UartInit() //串口定時器1初始化
{
EA=1; //打開總中斷
TMOD|=0x21; //設(shè)置定時器1工作方式為方式2
TR1=1; //啟動定時器1
TH1=0xfd; //波特率9600
TL1=0xfd;
SCON=0X50; //允許接收
// ES=0;
}
void USART_IRQ(void) interrupt 4
{
unsigned char Temp; //定義臨時變量
if(RI) //判斷是接收中斷產(chǎn)生
{
RI=0; //標(biāo)志位清零
Temp=SBUF; //讀入緩沖區(qū)的值
// P1=Temp; //把值輸出到P1口,用于觀察
SBUF=Temp; //把接收到的值再發(fā)回電腦端
}
if(TI) //如果是發(fā)送標(biāo)志位,清零
TI=0;
}
/********************************************************************
* 名稱 : Main()
* 功TMOD=0x11,轉(zhuǎn)為二進制就是00010001,即T0和T1的最低兩位均為01,工作方式為方式1--16位定時器或計數(shù)器。第三位為0,
設(shè)定T0,T1為定時器,對內(nèi)部脈沖進行計數(shù),用來折算時間。第四位也是0,說明不參考INTx引腳電平,
由內(nèi)部寄存器來控制定時器的啟停。能 : 實現(xiàn)按鍵控制LED的亮滅
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Main(void)
{
// Init_Timer1();
// Init_Timer2();
// InitUART();
ET0_init();
UartInit();
WDT_CONTR = 0x24;
while(1)
{
KEY();
// WDT_CONTR = 0x24;
WDT_CONTR|=0x10;
}
}
作者:
npn
時間:
2023-7-13 22:13
ES = 1; //打開串口中斷
PS =1; //串口中斷高優(yōu)先級
// SM0=0;
作者:
cnfloatleaf
時間:
2023-7-14 00:20
盡量避免同時開幾個中斷,否則會出一些莫名其妙的問題。建議中庸一個定時器中斷,其他用查詢。
作者:
wulin
時間:
2023-7-14 06:13
定時器1用做串口波特率發(fā)生器后不可以同時再用作定時器1中斷!
作者:
liuyongjun000a
時間:
2023-7-14 07:58
串口與定時1在時間上重疊上,都用定時器1。這個定時中斷沒處理好,再好好研究串口與定時1同時用可能造成的時序問題。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
中文字幕91
|
国产精品久久久爽爽爽麻豆色哟哟
|
亚洲色在线视频
|
欧美人成在线视频
|
午夜精品久久久久久久久久久久久
|
亚洲精品日本
|
孰女乱色一区二区三区
|
99久热在线精品视频观看
|
欧美日韩在线免费
|
天天操夜夜爽
|
99久久精品国产麻豆演员表
|
99精品国产一区二区三区
|
亚洲视频在线一区
|
国产精品一区久久久
|
久久精品一区
|
日韩一级免费看
|
91免费观看视频
|
欧美人妇做爰xxxⅹ性高电影
|
日日操夜夜干
|
午夜精品一区二区三区免费视频
|
精品一区二区久久久久久久网站
|
成人精品一区亚洲午夜久久久
|
日日干天天操
|
99reav
|
在线观看日本高清二区
|
h片免费看
|
成人免费视屏
|
欧美爱爱视频网站
|
老头搡老女人毛片视频在线看
|
日韩av在线一区二区
|
国产精品美女久久久久久免费
|
中文字幕一区在线观看视频
|
欧美亚洲一区二区三区
|
99精品久久久久久
|
亚洲一区二区av
|
久久久久久免费毛片精品
|
亚洲天堂色
|
日本不卡一区二区三区在线观看
|
欧美aaaaaaaa
|
国内久久
|
人人草天天草
|