null汇编语言(ASM)编程汇编语言(ASM)编程清华大学电子工程系
2004年3月《单片机与嵌入式系统》
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
提要内容提要汇编程序的一般结构
与C程序比较
开发工具的安装和使用
TM, PD30SIM, KD30
本次实验参考文档参考文档Document
6020e_ASM program 汇编编程手册
6020e_software manual 指令手册
各开发软件的Help中的Manual
教材第三章 指令系统汇编程序的一般结构汇编程序的一般结构C程序结构的一个简单例子
#include “stdio.h”
void main()
{
int a, b, i;
a=3; b=0;
for (i=0; i<5; i++)
b + = a;
……
} 汇编程序的一般结构汇编程序的一般结构汇编程序结构(1) - Section
.include sfr62s.inc
.section memory, data ;数据段
result: .blkb 1
temp: .blkb 1
.section prog, code ;代码段
reset:
mov.b MyAge, temp
mov.b temp, result
……汇编程序的一般结构汇编程序的一般结构汇编程序结构(2)
……
.section cons_var, romdata ; ROM
数据区
MyAge: .BYTE 26
.section inter, romdata
.org Vvector+ (8*4)
.lword reset
.endM30624FGFP Memory MapM30624FGFP Memory Map汇编程序需要多做一些工作汇编程序需要多做一些工作需要定义每个Section的起始地址;
需要指定基址寻址方式的首地址和堆栈的首地址;
需要设置中断向量表;
需要在使用RAM区之前清零;
其他设置:根据使用的外设,设定相关的寄存器和I/O控制寄存器。附加工作1 - Section起始地址附加工作1 - Section起始地址需要定义每个Section的起始地址
VramTOP .equ 000400H
VprogTOP .equ 0F0000H
Vintbase .equ 0FA000H
Vvector .equ 0FFFDCH
.section memory, data
.org VramTOP
……
在实际设计中,这些值根据所选的MCU片子来定附加工作2 - 基址寻址设置附加工作2 - 基址寻址设置基址寻址方式
SB_base .equ 380H ;基址
.section memory, data
result: .blkb 1
.section prog,code
.org VprogTOP
.sb SB_base ;寄存器地址声明
.sbsym result ;变量声明其寻址方式
ldc #SB_base, SB ;对基址寄存器赋值
……附加工作2 -堆栈设置附加工作2 -堆栈设置两种堆栈:堆栈指针ISP和USP
用何种堆栈,由堆栈指针选择标志位(U标志)选取。
U = 0 选取中断堆栈指针 ISP
U = 1 选取用户堆栈指针 USP
SP指针位置如何设定: 栈顶指针
Push : SP = SP – 1
Pop : SP = SP + 1
相关设定代码:
VIstack .equ 2C00H
ldc #VIstack, ISP ;赋值附加工作3-设置中断向量表附加工作3-设置中断向量表可变中断向量表
Vintbase .equ 0FA000H
LDINTB #USER_vector_table ;设置寄存器
INTB
.section val_vect,romdata
.org Vintbase ; 指定中断向量
表起始位置
USER_vector_table:
.lword dummy ; No0 Break Interrupt
.lword dummy ; No1 Break Interrupt附加工作3-设置中断向量表附加工作3-设置中断向量表固定中断向量表
Vvector .equ 0FFFDCH
.section inter,romdata
.org Vvector+(8*4)
.lword reset ;复位中断向量
附加工作4- RAM区清零附加工作4- RAM区清零RAM区清零
VramTOP .equ 400H
VramEND .equ 2BFFH
mov.w #0, r0
mov.w #(VramEND+1-VramTOP)/2, r3
mov.w #VramTOP, a1
sstr.w
r0 为内容; r3 为次数;a1 为首地址。附加工作5- 设置其他寄存器附加工作5- 设置其他寄存器如果使用了 I/O 需设置
mov.b #0, pd8 ;方向寄存器
mov.b #1, pur2 ; 上拉电阻寄存器
更多
时钟,A/D等外围电路的设置
null一个求 8 位 BCD 码相减的例程
;---------- INCLUDE OF SFR FILE ----------------
.list off ; 程序不列表
.include sfr62s.inc ; sfr 包含文件
.list on ; 程序列表
;---------- DEFINE OF SYMBOLS ------------------
VramTOP .equ 000400H ; 内部 RAM起始地址
VramEND .equ 002BFFH ; 内部 RAM终了地址
VIstack .equ 002C00H ; 堆栈指针
VprogTOP .equ 0F0000H ; 程序区起始地址
Vintbase .equ 0FA000H ; 可变矢量表起始地址
Vvector .equ 0FFFDCH ; 固定矢量表起始地址
SB_base .equ 000380H ; SB 基址
;null;---------- KEEP OF RAM AREA -------------------
;
.section memory,data
.org VramTOP
result: .blkb 2 ; 运算结果数据
;
.section prog,code
.org VprogTOP
.sb SB_base ; 分配SB寄存器
.sbsym result ; 设置寻址方式null;---------- CLEAR OF RAM -----------------------
;
reset:
ldc #VIstack,ISP ; 设中断指针的值
ldc #SB_base,SB ; 设 SB 的值
; ldintb #Vintbase
;
mov.w #0,r0 ; 淸0
mov.w #(VramEND+1-VramTOP)/2, r3
; 循环次数
mov.w #VramTOP, a1 ; 起始地址
sstr.wnull;---------- INITIALLIZE ------------------------
LDINTB #USER_vector_table
;设置可变矢量
表格
关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载
地址
mov.b #00000110B, int0ic
; 设置INT0中断控制器
mov.b #0,pd8 ; p8 口为输入
mov.b #1,pur2 ; p8.1 口设置上拉
;---------- MAIN PROGRAM -----------------------
main:
mov.w #0055H,r0 ; 55H => r0
mov.w #0066H,r1 ; 66H => r1
mov.w #0055H,r2 ; 55H => r2
mov.w #0044H,r3 ; 44H => r3null dsub.w r1,r0 ; 低位字减
xchg.w r2,r0 ; 保存低位字
xchg.w r3,r1 ;
dsub.w r1,r0 ; 高位字减
xchg.w r2,r0 ; 保存高位字
xchg.w r3,r1 ;
mov.w #VramTOP,a0
mov.w r0,[a0]
inc.w a0
inc.w a0
mov.w r2,[a0]
jmp mainnull;---------- START----------------------
sw_int0:
reit
;----- DUMMY UART0 INTERRUPT PROGRAM ------
dummy:
reit;
;---------- VARIABLE VECTOR TABLE SET ----------
.section val_vect,romdata
.org Vintbase
USER_vector_table:
.lword dummy ; No0 Break 中断
.lword dummy ; No1 Break 中断
.lword dummy ; No2 Break 中断null … …
… …
.lword dummy ; No27 TimerB1中断
.lword dummy ; No28 TimerB2中断
.lword sw_int0 ; No29 INT0
(低有效)中断
… …
… …
;---------- VECTOR TABLE ----------
.section inter,romdata
.org Vvector+(8*4)
.lword reset
;---------- PROGRAM END ----------
.end关于指令系统关于指令系统请参考教材
更加详细的可以看文档;
software_manual.pdf;
详细列出每个指令使用的注意事项。开发工具的安装和使用开发工具的安装和使用通过TM提供了集成化的开发环境
软件安装文件位于:
E:\mcusetup
TMV320_E.EXE TM集成环境 nc30wav500r2_e.exe 编译器pd30simv500r1_e.exe PDSIM仿真软件
安装
双击直接安装即可,安装目录均为
E:\MTOOL演示:整个开发过程演示:整个开发过程
启动TM软件
建立一个新的Project
添加汇编源程序(A30文件)到Project里面
编辑和修改A30文件
设置编译参数
编译Build和检查错误
单步仿真:
如何观察当前执行情况:各种显示窗口
如何修改变量和寄存器的值null
源文件有两个
Sampa.A30
SFR62S.INC
Project保存路径
在E盘根目录上自建工作目录:
比如:E:\ lu
然后在该目录下面建Project目录:
E: \lu \test1
然后将两个源文件拷贝到该目录下面本次实验内容本次实验内容1.把AD转换所得的8位二进制数0到255,转换
为0.0到5.0的十进制数。已知AD转换的基
准电压为5.0V。若用LED显示,小数点后取
几位比较合适?对10位的AD转换又该如何
考虑。输入字节可放R0L中;转换结果保
存在变量result中;
2.课外作业:已知一个偶对称
函
关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函
数的取样数
列(8位256点),求其频谱(16位256点)。
算法自选。