单片机汇编语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机汇编语言程序设计
机器语言只是01之类的二进制数。
汇编语言,用英文助记符来代替机器语言的语言。
汇编程序,用汇编语言编写的程序称为汇编源程序
汇编,汇编源程序需转换成二进制代码表示的机器语言程序,单片机才能识别和执行,这一转换过程称为汇编.
汇编程序,完成“翻译”工作的程序称为汇编程序。
目标程序,经汇编程序“汇编”得到的以0,1代码形式表示的机器语言程序称为目标程序。
反汇编,机器语言转换成汇编语言的过程
高级语言,与汇编语言相比,高级语言比较接近人类语言。
可读性比汇编更强。
汇编语句必须要有的操作码,未必有操作数,常见的四分段格式标号字段,操作码字段,操作数字段,注释字段。
注释使用,来注释操作码字段, 操作码,汇编指令中唯一不可空缺部分。
操作数字段,
操作数有单操作数,双操作数,和无操作数三种情况,双操作数,两个操作数之间用,隔开。
操作数中十六进制,二进制,十进制的表示方法
十六进制采用末位加H;
十进制采用末位加D或者省略
二进制采用末位加B
伪指令,在汇编过程中不产生对应的机器码。
ORG 汇编起始地址命令
END 汇编终止命令
EQU 标号赋值命令
DB 定义数据字节命令
DW 定义数据字命令
DS 定义存储区命令
BIT 位定义命令
中断程序的编写思路
所谓中断就是,主程序在执行某项工作时,突然间遇到另外一个事件打断,这时需要程序去处理突然出现的事件。
处理完继续返回到主程序去执行原先被打断的工作。
中断与子程序的区别,
1. 中断和子程序的编写虽然都涉及到标号,但是中断是一旦触发了
中断标志,会自动生成LCALL 中断入口地址去调用中断子程序。
2. 中断的响应具有随机性,不确定性。
子程序常用于人为调用。
中断的构成
中断标志位总允许EA 中断源中断源允许
响应中断请求中断优先级IP 硬件查询
1.TCON:为定时器/计数器的控制寄存器。
字节地址88H,可位寻址。
IT0 ,IT1选择外部中断请求为跳沿触发。
IT0=1,IT1=1设置为跳沿触发。
TR0,TR1设置为1时启动定时器/计数器 3. SCON:串行口控制寄存器
地址98H,也可以位寻址
TI:串行口发送中断标志位
RI:串行口接收中断标志位
中断允许寄存器IE 地址A8H
中断优先级寄存器IP地址B8H IP中断优先级寄存器,可位寻址, PS,串行口中断优先级控制位。
PS=1;串行口中断为高优先级。
PT1:定时器T1中断优先级控制位 PX1:外部中断1中断优先级控制位 PT0:定时器T0中断优先级控制位 PX0:外部中断0优先级控制位
同级中断查询次序,从高到低,
外部中断0 中断入口 003H
T0溢出中断中断入口 00BH
外部中断1 中断入口 013H
T1溢出中断中断入口 01BH 串行口中断中断入口 023H 中断源中断请求被响应的条件
1. 总中断和中断源允许开关接通,即IE寄存器中的中断总允许位
EA=1,响应的中断源中断允许位为1
2. 该中断源发出中断请求,即有中断请求标志为1
3. 无同级或者更高级的中断正在被服务
外部中断响应的时间一般是3个机器周期到8个机器周期
中断请求标志位查询占1个机器周期。
然后生成LCALL指令,需
要2个机器周期
当进行中断查询时,才开始执行RETI或者访问IE或IP的指令,
,这最长需要2个机器周期,,则需要再继续执行一条指令,按最
长的乘法或者除法,需要4个机器周期。
才生成LCALL,需要2个
机器周期,总共需要8个机器周期
定时器/计数器的结构
TCON:用于控制定时器/计数器的启动和停止计数TR0和TR1
工作方式寄存器TMOD 地址89H 不可位寻址
1. GATE:门控位
GATE=0时,仅由运行控制位TRx,x=0,1,来控制定时器/计
数器运行。
GATE=1时,用外中断引脚(INT0或者INT1)的电平与控制位
TRx共同来控制定时器/计数器运行。
2. M1,M0,工作方式选择位
00 方式0,为13位定时器/计数器
01 方式1,为16位定时器/计数器
10 方式2,8位的常数自动重新装载的定时器/计数器 11 方式3,仅适用于T0,此时T0分成两个8位计数器,T1停止计数
3.C/T,计数器模式和定时器模式选择位
C/T=0,为定时器工作模式
C/T=1,为计数器工作模式
定时器方式0,TLx,x=0,1,的低5位和THx的高8位构成。
TLx低5位溢出则向THx计数进位。
THx计数溢出则把TCON中的溢出标志位TFx置1 定时器方式1,TLx作为低8位,THx作为高8位的16位定时器
定时器方式2,自动重装载的8位定时器/计数器,TLx(x=0,1)作为常数缓冲器,当TLx计数溢出时,在溢出标志TFx置1的同时,还自动将THx中的初值送至TLx,使TLx从初值开始重新计数。
定时器方式3,定时器T0分为两个独立的8位计数器TL0和TH0。
TL0使用T0的状态控制位C/T,GATE,TR0,INT0,而TH0作为一个固定的8位定时器。
并使用定时器T1的状态控制位TR1
和中断标志TF1,同时占用定时器T1的中断请求源TF1. 此时,T1若工作
工作方式0:13位定时器
工作方式1,16位定时器
工作方式2,自动重装载的8位
工作方式3,T1停止计数
对于测量脉冲宽度的程序我觉得是一个值得深思的程序 ORG 00H ;汇编起始地址00H LJMP START ;跳转到主程序的入口 ORG 100 ;汇编起始地址100H START: MOV SP,#50H ;设置堆栈指针
MOV TMOD,#90 ;使用门控位GATE1=1
;T1是方式1,只有INT1
;INT1=1时开始计时
MOV TH1,#00H
MOV TL1,#00H
JB P3.3,$ ;等待INT1降低
SETB TR1 ;在INT1低电平期间打开
JNB P3.3,$ ;等待INT1变成高电平
JB P3.3,$ ;等待INT1变低电平
CLR TR1 ;停止T1计数
MOV A,TL1 ;T1计数值送到A
END ;汇编指令的结束
串行口的结构,
SCON:98H,可位寻址,串行口控制寄存器
SM1 SM0 工作方式
0 0 同步移位寄存器方式,用于扩展I/O,
0 1 8位异步收发,波特率可变(由定时器控制)
1 0 9位异步收发,波特率为fosc/,64或者32,
1 1 9位异步收发,波特率可变,由定时器控制, 特殊功能寄存器PCON 地址87H SMOD,波特率选择位
串行口波特率的计算公式
SMOD方式1波特率=(2/32)*定时器T1的溢出率。