关键词不能为空

当前您在: 主页 > 英语 >

单片机知识总结

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 23:35
tags:

-

2021年2月1日发(作者:法克)


使用


C


语言编写单片机中断应

< br>【例


7-1




设系统时钟频率为


P20 = !P20;






//



P2.0


取 反



用程序时,用中断号


< p>
6MHz


,利用


T0


定时 ,每隔


1s


i = 20;


//< /p>


重新



计数


变< /p>


区分每一个中断。例如,



< p>
P2.0


的状态取反。



量赋值



void


X0_ISR(void)



interrupt


0{}



解:


所要求的定时时间


1s


超过


}





}


//


外 部中断


0


中断函数




了定时器的定时能力(时钟频


下面举 例说明


12T


模式下,


void T0_ISR


(void)


interrupt


1{}



率为


6MHz



12


分频时,

< p>
16



//


定时器


T0


中断函数



S TC12C5A60S2


单片机串行通













void


X1_ISR(void)



interrupt


2{}



131.072ms



信程序的编制方法。



,所以无法采用定


//


外部中断


1


中断函数



【例


8-1




设有甲、乙两台单


时器直接实现


1s< /p>


的定时。



void T1_ISR


(void)


interrupt


3{}








定< /p>







片机,编写程序,使两台单片


//


定时器


T1


中断函数



机间实现如下串行通信功能。


50ms


,在中断服务程序中对定


void


UART1_ISR


(void)










时器溢出中断请求进行计数,< /p>


interrupt


4{}



//


串行口


1


中断< /p>


11.0592MHz





当计够


20


次时,将


P2.0


的状


函数



甲机(


发送


机)


:将


首址为


态取反,


否则直接返回主 程序,


void


ADC_ISR


(void)


interrupt


ADDRT



128


字节外部


RAM


从而达到


1s


的 定时。



5{}



//ADC


中断函数



数据块顺序向乙机发送;



选择


T0



16


位定时器 方式,


【例


5-1


< br>编程实现通过延时函


乙机


(接收机)


将接收的数据,


方式字为


01H


。系统时钟频率


数,


P1.0


输出方波信号,并通


顺序存放在以首址为


ADD RR



6MHz


12


分频时,计数单


过示波器观察程序输出波形的


的外部


RAM


中。


< /p>


位时间间隔为


2


μ


s



T0


的计数

周期。



甲机


(发送机)


汇编语言程序:




初值为:




#include



stc12.h”





$$INCLUDE


()


;




//STC12C5A60S2


单片机寄存

含单片机寄存器定义文件



$$INCLUDE



()




;


器定义头文件


包含


STC12C5A60S2


寄存器定

< br>


ORG 0000H


sbit


P10=P1^0;



//


定义


P1.0




LJMP


MAINT











义文件






;


主程序入口



ORG



0000H


void


delay(unsigned


long


cnt);//


ORG


0023H


LJMP





MAIN






;



延时函数声明




LJMP


INTSE1



;


串口


1< /p>


主程序




void main(void) {


中断服务程序入口



ORG




000BH



P10=1;



ORG



0100H


;T0


中断服务程序入口地址




while(1) //


主程序循环



MAINT:



MOV


SP,#60H


LJMP



T0_ISR


{delay(60000);





;









ORG




0100H


P10=~P10;



}



}


MOV


SCON,#01000000B


;



MAIN:



MOV






SP,#60H












void


delay(unsigned



;


设置堆栈指针



串行口工作方式


1


long cnt)




//


延时函数



MOV



TMOD,#01H ;T


初始化



MOV


TMOD,#20H





;



{




while(cnt>0) cnt--;




}


MOV




TL0,#58H


时器


1

< p>
为工作方式


2



MOV




TH0,#9EH



MOV


TH1,#0FDH


;


9600b ps


如图所示的中断线路可实现系


MOV




A,#20

;加器


A



20


的时间常数



统的故障显示,当系统的各部


SETB




T0



;


允外


T0


中 断



MOV


TL1,#0FDH < /p>


分工作正常时,


4


个故障源输

< p>
SETB



EA


;CPU


开中断



SETB



TR1


;


启动定时器


1


入端全为低电平,指示灯全熄


SETB



TR0



;


启动


T0


计数



SETB



ES


;


串行口开中断



灭。若当某部分出现故障,则


SJMP





$$





;


等待



SETB



EA


;


开中断



对应的输入线由低电平变为高


T0_ISR:


MOV






TL0,#58H







MOV DPTR,#ADDRT; ADDR


T


电平,从而引起单片机中断,


MOV





TH0,#9EH


;



是首址,可以使用


EQ U


定义



试设计判定故障源的程序,并


新装入时间常数



MOV


R0,#00H



;字节数初值



进行相应的灯光显示。



DEC



A




;


累加器


A


内容减


1


MOVX



A,@DPTR


;



解:通过或非门,将上升沿转


JNZ


EXIT



第一个发送字节



换为下降沿,利用下降沿中断




CPL






P2.0


MOV


SBUF,A



;

启动串行口发


方式实现。





MOV






A,#20








;




汇编语言程序如下:



累加器


A


重载


20



SJMP $$


;


等待中断



ORG


0000H


EXIT: RETI




LJMP


MAIN



;


转主程序











END


;


中断服务程序



ORG


0003H


程序中的符号“


$$


”表示“本条


INTSE1:


CLR



TI



LJMP


INT_X0


;


转中断服

< p>
指令地址”


,指令“


SJMP



$$





;


将中断标志清零



务程序






:“


HERE:


LJMP



CJNE



R0,#7FH


,LOOPT




ORG


0100H


HERE





;


判断


128B


是否发送完


,


若没完


,


MAIN:


MOV


SP,#60H


#include



stc12.h




//



则转



MOV


P2,#0FFH


;


指示灯全熄



STC12C5A60S2< /p>


的寄存器定


CLR



ES


全部发送完毕,


禁止




义文件



串行口中断



SETB


IT0


;


为边沿触发中


sbit


P20=P2^0;



< p>
//


声明


P2.0


LJM P



ENDT



;


转中断返回



断方式



的引脚位变量



LOOPT:


INC



R0


SETB


EX0


;


允许中断



unsigned char i;


//


声明计数




;


修改计数值



SETB


EA


; CPU


开中断



变量。


C


语言程序中尽量不要


INC



DPTR


;


修改地址指针



SJMP


$$


;


等待中断



使用


ACC


MOVX



A,@DPTR


;


取发送


INT_X0:


MOV


A,P1


;



void main (void)



数据



应关系:


LED0--P2.0-- P1.0


,其


{


MOV


SBUF,A



启动串行口



他类推




//SP=0x60;



//


使用


C


语言设


END T:




RETI



;


中断返回



CPL


A



计程序时,可以不设置堆栈指


END


ANL


A,#0FH






MOV


P2,A

































TMOD=0x01;


乙机接收汇编语言程序:



RETI





END



TL0=0x58;


$$INCLUDE


()


;



对应的


C


语言版程序 :




TH0=0x9E;


含单片机寄存器定义文件



#include



stc12.h





i=20; //


计数变量赋初值



ORG


0000H



//


包含寄存器定义头文


ET0=1;


//


允许


T0


中断



LJMP



MAINR



;


转主程序






EA


= 1;




//


开放总的中断



ORG


0023H


void


X0_ISR


(void)


interrupt


0


TR0=1;


//


启动


T0


计数



LJMP



INTSE2






//


外部中断函数




while(1);


//


等待中断



;


串口


1


中断服务程序入口



{



P2=~P1;



}


}


ORG


0100H


void main (void)





void


T0_ISR


(void)


interrupt


1





MAINR:MOV


SP,#60H


{unsigned char i;


//


定时器


T0


中断 函数





;


设置堆栈指针



P2=0x0f


//


熄灭所有的指示灯



{


MOV


SCON,#01010000B


;



IT0=1;

< br>//


外部中断


0


为边沿触


TL0=0x58;


//


重新



入时



串行口工作方式< /p>


1


,允许接收



发方式



常数



MOV


TMOD,#20H


;


定时器


1


EX0=1;




//


允许外部中断


0


TH0=0x9E;


为工作方式


2



EA


=1;




//


允许总的中断





i-- //


计数变量减


1


MOV


TH1,#0FDH


;


< p>


while(1);




//


等待中断



if


(i==0) {


< p>
//


若减到


0



9600bps


的时间常数



}


则将


P2.0

取反



MOV


TL1,#0FDH


SETB



TR1



;


启动定时器


1


SETB



ES


;


串行口开中断



SETB



EA


;


开中断



MOV


DPTR,#ADDRR


;



据缓冲区首址送


DPTR


MOV


R0,#00H


;


置传送字


节数初值





SJMP



$$


;


等待中断




;


中断服务程序



INTSE2:CLRRI


;


清接收 中


断标志



MOV



A,SBUF


;








MOVX


@DPTR,A



;


接收的数据送缓冲区



CJNE


R0,#7FH,LOOPR


;


判接


收完没有



;


若没有,



LOOPR


继续接收



CLR


ES


;


若接收完,则关串


行口中断



LJMP



ENDR


LOOPR:INC R0


;



修改计数




INC


DPTR


修改地址指针



ENDR:



RETI


;


中断返回



END


【例


8-2




设有甲、乙两台单


片机,以工作方式


2


进行串行


通信。


每帧为


11


位,


可程控的



9


位数据为奇偶校验用的补


偶位。编程实现如下 所述的应


答通信功能:



甲机取一数据,进行奇偶校验


后发送。



乙机对收到的数据进行奇偶校


验,若补偶正确则乙机向甲机


发出应答信息



00H



代表


“数

据发送正确”



甲机接收到此信


息 后再发送下一个字节。若奇


偶校验错误,则乙机向甲机发


出应答 信息



0FFH



代表


“数


据不正确”

< p>


要求甲机再次发送


原数据,直至数据发送正确。



甲机发送


128

字节数据后停止


发送。


乙机接收


1 28


字节数据。



甲机汇编源程序:



$$INCLUDE


()


;




STC12C5A60S2


单片机寄存


器定义文件



ADDRT EQU




0000H


ORG


0000H


LJMP


MAINT ;


跳至主程序入


口地址



ORG


0023H



;


串口


1



断服务程序入口



LJMP


INTSET


ORG


0100H


MAINT:


MOV


SP,#60H


MOV


PCON,#80H


;


波特率加




MOV


SCON,#10010000B;

< br>置


工作方式


2


,并允许接收



MOV


DPTR,#ADDRT


;



置数据块首址


ADDRT


的地址


指针



MOV


R0,#00H


设置发送字节


初值



SETB


ES


;


允许串行口中断



SETB


EA




;CPU


开中断



MOVX


A, @DPTR


;



第一个发送数据



MOV


C,P



;


数据补偶



MOV






TB8,C


MOV


SBUF,A


;


启动串行

< p>


,


发送数据



SJMP



$$



;


中断服务程序



INTSET:



JB



RI


,LOOPT1;


接收中断?



RI=1


,< /p>


则转接收乙机发送的


应答信息



CLR





TI



;


因< /p>


RI=0


,则必有


TI=1


,表明是甲机发送数据的


中断请求



LJMP END


T


甲机发送一数 据


完毕跳至中断返回程序



LOOPT1:



CLR


RI


;



接 收中断标志



MOV


A,SBUF


;


取乙机的


应答数据

< br>


SUBB






A,#01H

< br>;


判断乙机


应答信息是否为“


0 0H




JC


LOOPT2


;


数据传送

< p>
正确,则转


LOOPT2


MOVX




A,@DPTR


;


数据传


送不正确时,要求重新发送

< br>


MOV


C,P


MOV


TB8,C


MOV


SBUF,A


;


启动串行


口,重发一次数据



LJMP


ENDT


;


跳中断返回程序



LOOPT2:INC


DPTR ;



改地址指针,发送下一个数据



INC


R0


;

修改发送字节数


计数值



MOVX


A,@DPTR;




个数据补偶



MOV


C,P


MOV


TB8,C


;





< br>使



MOV TB8,P


MOV


SBUF,A


;

< p>
启动串行


口,发送新的数据



CJNE



R0,#80H,END


T


;


数据


发送完?若没有发送完,则中


断返回



CLR


ES


;


全部发送完毕,


禁止串行口中断



ENDT:



RETI



;


中断返回



END


乙机汇编语言程序:



$$INCLUDE


()


;




STC12C5A60S2


单片机寄存


器定义文件

















ADDRR



EQU


0000H


ORG


0000H



LJMP


MAINR


主程序入口



ORG


0023H


;


串行中断入口



LJMP


INTSER



;



至串行口中断服务程序


ORG


0100H


MAINR:MOV


SP,#60H


MOV


PCON,#80H




;



特率加倍



MOV


SCON,#10010000B



串行口为工作方式


2


,允许 接




MOV


DPTR,#ADDRR;


数据指


针首址


MOV


R0,#00H;


接收 数据字节


数初值



SETB


ES;


串行口开中断



SETB


EA


;CPU


开中断



SJMP


$$



等待中断




;


串行口中断服务程序



INTSER:


JB




RI,LOOPR1


< p>
;



RI



1


,则转接收程序入口



CLR TI



;



RI=0


< br>必有


TI=1



是发送中断,故 应清零



LJMP



ENDR


;


跳至中断


返回程序



LOOPR1:CLR





RI



;


清接收中断标志



MOV




A,SBUF


;


读取接收

< p>
的数据



MOV




C,P


;


奇偶校验



JC









LOOPR2


;


< br>8


位数为奇,则转


LOOPR2


再检



RB8




ORL





C,RB8


JC







LOOPR3







;



偶校验错误时,转

LOOPR3


LJMP



LOOPR4


;


< br>偶



确,转


LOOPR4


LOOPR2:ANL




C,RB8



;8

< br>位数为奇


,再检测


RB8














JC







-


-


-


-


-


-


-


-



本文更新与2021-02-01 23:35,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/595836.html

单片机知识总结的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文