首页 ASM编程

ASM编程

举报
开通vip

ASM编程null汇编语言(ASM)编程汇编语言(ASM)编程清华大学电子工程系 2004年3月《单片机与嵌入式系统》内容提要内容提要汇编程序的一般结构 与C程序比较 开发工具的安装和使用 TM, PD30SIM, KD30 本次实验参考文档参考文档Document 6020e_ASM program 汇编编程手册 6020e_software manual 指令手册 各开发软件的Help中的Manual 教材第三章 指令系统汇编程序的一般结构汇编程序的一般结构C程序结构的一个简单例子 #includ...

ASM编程
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点)。 算法自选。
本文档为【ASM编程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_827003
暂无简介~
格式:ppt
大小:198KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2012-05-21
浏览量:26