首先,介绍一下51单片机的定时计数器,51有两个定时计数器,分别为T0,T1,基本一样,;有一点不同,下面我们介绍定时计数器T0
;了解8051的timer0中断的程序写法,用中断法产生定时
;上面显示的是proteus仿真图,下面的是源程序
;说明:(源程序中的中断入口地址很重要(这个是固定的),程序中断时,会在对应中断固定的
;入口地址进入,因为规定的相隔入口间的空进有限,只能用跳转指令跳转,最终用RETI强制返回
;这个程序把所有的中断入口地址都写上了,没有用到的,用RETI直接屏蔽)
;运行结果是使led灯明一下,暗一下。
COUNT EQU
9217;对于11.0592的晶振来说,延时10ms
LED
EQU
P1.1
ORG
0000H
LJMP RESET
;开始时跳转转到初始化程序中
ORG
0003H
;外部中断0
RETI
ORG
000BH
;定时器/计数器T0入口地址
LJMP INT_TIMER0
;跳转到定时器/计数器中断服务程序中去
ORG
0013H
;外部中断1
RETI
ORG
001BH
;定时器/计数器T1
RETI
ORG
0023H ;串行口中断
RETI
ORG
0030H
RESET:
MOV
R0,#00H
DJNZ R0,$
;刚开始,先进行少量的延时,是各种工作寄存器准备好
CLR
LED
MOV
TMOD,#00000001B
;设置定时器T0工作在方式1(16位)
MOV
TH0,#HIGH(65536-COUNT);设置初值(关于怎么计算,很多书上都有)
MOV
TL0,#LOW(65536-COUNT)
;MOV
TH0,#(65536-COUNT)/256;取高八位数据(这是第二种方法)
;MOV
TL0,#255
;取底五位(为最大了)
CLR
TF0
;先把溢出标志位清零
SETB TR0
;开始计时
SETB EA
;全局中断打开
SETB ET0
;定时器/计数器T0溢出中断打开
MOV
R2,#00H
;作为定时器累加器使用
LOOP:
SJMP LOOP
;在此循环,等待中断
INT_TIMER0:
;当TF0=1,跳转到下面的中断服务程序中
INC
R2
;使R2自增一
CLR
TF0
;重新置中断标志位为0
MOV
TH0,#(65536-COUNT)/256
; 重新符初值(因为溢出后变成0了)
MOV
TL0,#255
CJNE R2,#5,RETURN
;让灯明暗相间50ms
MOV
R2, #00H
CPL
LED
;让灯明暗交替变化
RETURN:
RETI
END
;程序写完了(并不是很难,不过就是配置一下定时器,在中断中写点处理程序罢了
关键字:51单片机 汇编 中断程序
引用地址:
51单片机汇编中断程序
推荐阅读最新更新时间:2024-03-16 14:43
8051单片机中的寄存器是算CPU还是RAM
问题:单片机8051中的一些寄存器到底算CPU的还是RAM的? 请高手指点,像累加器DPTR,A,PSW等一些寄存器是属于CPU的,但书上又说他们都属于RAM中的特殊功能寄存器(SFR),这是什么道理? 另外,存储器和寄存器不是两个功能,结构都不同的东西么?为什么RAM中存在许多寄存器组,即二者在此是相同的? 综合理解:有以下几种可能: 1、CPU是一个抽象的概念,如同操作系统这个概念一样没有明确的界线;(cpu是由人划分出来的一块区域不明确) 2、CPU这个概念不适用与51; 3、51可以划分CPU和RAM部分,但CPU和RAM有交叉的部分(比如寄存器组等) 4、CPU部分寄存器是和RAM统一编址,访问该RAM地址即等于
[单片机]
基于51单片机的可控硅调压调光程序-带过零检测
这是一个用51单片机通过过零检测来调整可控硅的导通角从而实现调光调压,其中过零电路用一个p620光耦,220v这端的电阻是40k,这是一个已经有成熟应用的例子. 全部代码下载:http://www.51hei.com/f/kkggl.rar 以下是c51源代码部分: #include reg52.H #include "intrins.h" #define _50msL_ 50000*0.9216 #define _50msH_ 50000*0.9216 #define _1ms_ 922 #define _10ms_ 9216 #define _50us 46 //50*0.9216 #define uchar unsi
[单片机]
51单片机波形发生器程序设计
一、 作品简介:可以通过按键控制STC89C52单片机输出 不同波形 信号。通过usb给pcb板通5v的电压可以发出方波,三角波,锯齿波,正弦波并在LCD显示屏上显示波形类别,频率和幅值。通过按键可调波形类别,可调节频率步进值有1Hz,10Hz和50Hz。最低频率为10Hz最高频率为800Hz。 二、设计原理:将各种波形的每个周期平均分成255份,把每份的值依次发给P0口,每份的时间间隔通过开启定时器0来控制,当定时时间到时单片机就产生中断,在中断服务程序里面通过P0口将每份的值发出去,这个值通过向D/A换器的输入端按一定的规律发生数据,从而在转换电路的输出端得到相应的电压波形。 三、 功能说明:能够产生方波、锯齿
[单片机]
51单片机扩展IO口后扩展口的地址如何确定
1. 然后它说8255的A口、B口、C口、控制寄存器的地址分别为7FFCH、7FFDH、7FFEH、7FFFH。这个是怎么算出来的? 高八位7F是因为p2.7为0是选通8255的cs片选端,第八位是FC,FD,FE,FF是由8255内部结构决定的,芯片的技术手册上会有,其实也是由最后两位的组合进行选择 2.在用C51的P0,P2口做外部扩展时使用,其中XBYTE ,P2口对应于地址高位,P0口对应于地址低位。一般P2口用于控制信号,P0口作为数据通道。 比如:P2.7接WR,P2.6接RD,P2.5接CS,那么就可以确定个外部RAM的一个地址,想往外部RAM的一个地址写一个字节时,地址可以定为XBYTE ,其中WR,
[单片机]
PIC单片机中断程序设计技巧
所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。三是,一般都
[单片机]
MCS-51单片机串口通信
串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制,比如你可以把写入单片机的数据码显示在电脑上,如可以使用一个按键,当按下它时使某一个字母如:AA,通过单片机的串口将它发送到电脑上显示,起到仿真器的某些功效,站长在开发数据采集设备时就是通过串口来检查数据正确与否的。 MCS-51内部含有一个可编程全双工串行通信接口,具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。 在进行异步通信时,数据的发送和接收分别在各自的时钟(TCLK和RCLK)控制下进行的,但都必须与字符位数的波特率保持一致。MCS-51串行口的发送和接收
[单片机]
STC12C5A60S2 串口中断接收程序
#define UART0_BUF_LEN 32 int UART1_Recv_count; //接收计数 bit UART1_Overflow_Flag; //缓冲区满标志 idata uchar UART1_Recv_BUF ; //串口接收缓冲区 //串口初始化 void Init_Uart() { UART1_Overflow_Flag=0; UART1_Recv_count=0; //22.1184M 晶振 115200波特率 PCON &= 0x7f; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 BRT = 0xFA; //设定独立波特率发生器重装值
[单片机]
8051单片机的特点_8051单片机的控制总线信号有哪些
8051单片机的特点 8051的指令系统由111条指令组成。如果按字节数分类,有49条单字节指令46条双字节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64条单周期指令、45条双周期指令和2条四周期指令,以单周期指令为主。 8051的指令系统具有以下特点: (1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行I/O口中的内容传送到内部RAM单元中而不必经过累加器A或工作寄存器Rn。这样可以大大提高传送速度和缓解累加器A的瓶颈效应。 (2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器A中。这为编成翻译算法提供
[单片机]