汇编语言及其程序设计.ppt_第1页
汇编语言及其程序设计.ppt_第2页
汇编语言及其程序设计.ppt_第3页
汇编语言及其程序设计.ppt_第4页
汇编语言及其程序设计.ppt_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 PIC汇编语言及其程序设计 设置为0表示输出 端口的输入输出控制 例:将RA4/T0CKI引脚设置为输入状态 BSF STATUS,RP0 BSF TRISA,4 22 例:将RB0/INT引脚设置为输入状态 BSF STATUS,RP0 BSF TRISB,0 例:将端口C的低四位设置为输出、高四位设 置为输入 BSF STATUS,RP0 MOVLW 0F0H MOVWF TRISC 23 例:从端口C的低四位引脚输出高电平、高四 位引脚输出为低电平 BSF STATUS,RP0 MOVLW 0 MOVWF TRISC MOVLW 0FH MOVWF PORTC 24 错误,“0x8”中第二个不是ASCII字符 指令后的操作数不能另起一行 汇编指令不能顶格书写 错误,变量符号或标号不能以数字开头 正确 正确 正确 28 4.2.2 MPASM的语法 程序员定义的变量符号必须顶格书写 跳转用的标号必须顶格书写 “:”写不写都可以 错误,变量或标号不能包含MPASM运算符“ -” 等价于 正确 正确 错误 正确 正确 错误,不是立即数形式 正确 正确 正确 错误,不是正确的二进制形式 正确 错误,不是正确的八进制形式 30 4.2.2 MPASM的语法 ”引导。“;”后直到此 行结束的内容全为注释信息。注释内容可以 是任意形式的文本字符,包括全角汉字和符 号。除了注释内容外,程序的其他地方不建 议使用汉字或全角符号。 定义MYCOUNT 符号 替换立即数0x70 符号名STEP等于0x23 如果MYCOUNT 没有事先定义则会产生一个错误 32 CBLOCK 和 ENDC 定义变量块起始地址为0x20 TEMP地址为00,占1个字节 BUFFER的起始地址为0x22,并保留 8个字节单元 VARL的地址为0x2A,占1个字节 VAR2的地址为0x2B,占1个字节 结束变量块定义 33 #include 或include 包含 PIC16F877A的头文件 34 LIST 设定所选单 片机型号为PIC16F877A 关闭看门狗定时器 选择RC振荡器,关闭低电压编程功能 若使用外部的高速振荡器,可以改写为 定义常数符号 ,即用DELAY_TIME符号代替200 用KEY1 符号代 替端口PORTB的第0引脚 37 ORG 定义以下指令从程序存储器地址0x000开始存储 定义中断入口地址,以下指令从地址0x004开 始存储 其他中断服务代码 主程序代码 定义PAGE1的起始地址,以下指令代码放在 PAGE1中 SUB1子程序代码 PC 相对寻址查表 实际产生指令RETLW 0 实际产生指令RETLW 1 &;实际产生指令RETLW 2 &; 实际产生指令RETLW 0x33(3的ASCII码) 实际产生指令RETLW 0x41(A 的ASCII码) &;实际产生指令RETLW 0x42(B 的ASCII码) ;实际产生指令RETLW 0x43(C 的ASCII码) 编程器能自动识别此地址作为EEPROM 数据区起始地址 EEPROM地址单元0=0x20, 1=0x32 4=0x4F, 5=0x4B 用语句标号得到指令地址 跳转到当前地址,程序进 入死循环 计数器减1并判0 跳转到上一行重复循环 跳转到当前地址程序进 入死循环 计数器减1 并判0 跳转到(当前地址-1)处 ,即上一行, 重复循环 42 取16 位立即数的高低字节:HIGH 和 LOW &; 2 字节变量赋立即数初值 定 义一个常数立即数 取立即数的低字节值,经 &;编译器计算将得到0xE8 赋给变量的低字节 取立即数的高字节值,经 &;编译器计算将得到0x03 赋 给变量的高字节 43 加减乘除: - * / &;高速异步通信波特率BPS=FOSC/16*(X+1) &;故,波特率常数X=FOSC(BPS*16)-1 定义工作波特率 定义单片机工作振 荡频率4MHZ &;其他代码 编译器计算 得到25(十进制25) 设定波特率 定时寄存器 W=0x2A 芯片选择PIC16F877A, RAM共有4个页面 在第0页内 用宏指令设定被调用子程序的页面 随后调用该子程序 用宏指令设定当前地址的页面 循环 SUB1子程序定义在第1页 子程序返回 设定SUB1所在的页面 设定当前指令所在的页面 C=0 C=1 50 CLRZ/ SETZ Z=0 Z=1 51 CLRDC/SETDC DC=0 DC=1 52 SKPC/ SKPNC 若C=1 则程序跳过下一条指令 若C=0则程序跳过下一条指令 53 SKPZ / SKPNZ 若 Z=1则程序跳过下一条指令 若 Z=0则程序跳过下一条指令 54 SKPDC / SKPNDC 若DC=1 则程序跳过下一条指令 若DC=0则程序跳过下一条指令 55 BC/BNC W=0x31 SUM=SUM+W 如果发生进位就跳 转到CARRY1处执行 如果没有进位则继续执行 BC下一条指令NOP W=0x55 FLAG=0x55 Z=1,FLAG=0x55,跳转到MATCH 处执行 Z=0,继续执行BZ 的 下一条指令NOP AAA是自定义变量 MOVF STATUS,W 63 位寻址 BSF STATUS,RP0 BCF PORTB,1 BSF INTCON,GIE BTFSS STATUS,Z BTFSC STATUS,C 64 4.4 MPASM汇编常用子程序设计 调用KEY键盘扫描程序,键值由W返回 PAGESEL Key_Function CALL Key_Function PAGESEL MAINLOOP GOTOMAINLOOP 66 判断分支程序段设计(续) ;- ;根据键入情况,确定相应键功能子程序 ;- Key_Function ADDWF PCL,F;确定相对偏移量 GOTOPKEY0;执行PKEY0键盘定 义功能 GOTOPKEY1;执行PKEY1键盘定 义功能 GOTOPKEY2;执行PKEY2键盘定 义功能 GOTOPKEYN;执行PKEYN键盘定 义功能 67 2. 循环程序段的设计 循环执行SHOW子程序100次。 ORG0000H MOVLWD101;取常数101 MOVWF28H;送入28H单元中 LOOP100 DECFSZ28H,F ;28H单元减1为0间跳 GOTOCSHOW;未到100次跳转显示 GOTOSOVER;100次结束 CSHOW PAGESELSHOW ;转入SHOW子程序页面 CALLSHOW;调用显示子程序 PAGESELLOOP100;返回到第0页面 GOTOLOOP100;返回继续减1操作 SOVER ;其它功能代码 END ORG0000H MOVLWD101;取常数101 MOVWF28H;送入28H单元中 LOOP100 DECFSZ28H,F ;28H单元减1为0间跳 GOTOCSHOW;未到100次跳转显示 GOTOSOVER;100次结束 CSHOW PAGESELSHOW ;转入SHOW子程序页面 CALLSHOW;调用显示子程序 PAGESELLOOP100;返回到第0页面 GOTOLOOP100;返回继续减1操作 SOVER ;其它功能代码 END 68 3. 查表子程序的设计 TRISB=0; TRISD=0;TRISD=0; RB0=1;RB0=1; PORTD=0B10010010;PORTD=0B10010010; b b e e g g a a f f d d c c PIC16F877 RD0 RD1 RD2 RD3 RD4 RD5 RD6 a b c d e f g g g a a f f d d c c Port DPort D 1001001010010010 用数码管显示数字 RB0 TRISD=0;TRISD=0; RB0=1;RB0=1; 1 PORTD=0B10010010;PORTD=0B10010010; 0 1 0 0 1 0 0 TRISB=0;TRISB=0; 74 七段数码管字形码编码表 数 字 共阴 极 字 形 码 共阳极字 形码 00x3F0xC0 10x060xF9 20x5B0xA4 30x4F0xB0 40x660x99 50x6D0x92 60x7D0x82 70x070xF8 80x7F0x80 90x6F0x90 75 3 查表子程序的设计 根据数字获得其数码管上的字形码。 MOVLW 1 ;此值决定返回的编码 CALLSMG_FONT MOVWFPORTD ;调用查表子程序 SMG_FONT ADDWFPCL,F;W加PCL形成偏移量 RETLW3FH;返回“0”编码,共阴极 RETLW06H;返回“1”编码 RETLW5BH;返回“2”编码 RETLW4FH;返回“3”编码 RETLW66H;返回“4”编码 RETLW6DH;返回“5”编码 RETLW7DH;返回“6”编码 RETLW07H;返回“7”编码 RETLW7FH;返回“8”编码 RETLW6FH;返回“9”编码 76 4. 延时子程序的设计 ;主频为4MHz时,编写单循环的软件延时子程序。 ;- ;软件延时子程序DELAY ;- COUNTER EQU 0x20 ;定义循环寄存器变量 DELAYMOVLW0xFF;循环常数 MOVWFCOUNTER ;循环寄存器 DECFSZCOUNTER,F ;循环寄存器递减 GOTO$-1 ;返回上一条语句循环 RETURN ; 此子程序能延时多长时间呢? 77 主频为4MHz时,请编写10ms软件延时子程 序。 CNT1EQU0x23 CNT2EQU0x24 CNT3EQU0x25 DEL10MS; MAIN FREQ=4MHz MOVLW0x0D;外循环常数 MOVWFCNT1;外循环寄存器 DLY_LOOP1 MOVLW0FFH;内循环常数 MOVWFCNT2 ;内循环寄存器 DECFSZCNT2 ;内循环寄存器递减 GOTO$-1;继续内循环 DECFSZCNT1 ;外循环寄存器递减 GOTODLY_LOOP1;继续外循环 RETURN 78 主频为4MHz时,请编写1秒软件延时子程 序。 DLY1S; MAIN FREQ=4MHz MOVLW .7;外循环常数 MOVWF CNT3 DLY_LOOP2 MOVLW 0xBA MOVWF CNT1;外循环寄存器 DLY_LOOP1 MOVLW 0xFF;内循环常数 MOVWF CNT2 ;内循环寄存器 DECFSZ CNT2,F ;内循环寄存器递减 GOTO $-1;继续内循环 DECFSZ CNT1,F ;外循环寄存器递减 GOTO DLY_LOOP1 ;继续外循环 DECFSZ CNT3,F GOTO DLY_LOOP2 RETURN 79 4.5 汇编语言程序模板 &为了方便程序员编写汇编程序,减轻重复劳动的负 担。MPASM编译器软件包中包含了大多数PIC单片机 的汇编语言程序模板。 &模版中包括每个汇编语言程序都有一些基本的书写 格式和必备内容。 &绝对定位的汇编程序模板,在“C:Program FilesMicrochipMPASM SuiteTemplateCode”文件夹 下 . &例如:PIC16F877A的汇编程序模板文件名为: 877ATEMP.ASM。 80 4.6 本章小结 &通过本章的学习,读者应该掌握以下内容 。 &熟记PIC16F877A的35条指令写法、用法; &理解寄存器间接寻址过程并掌握其编程方 法; &掌握常用子程序设计,包括分支、循环、 延时和查表子程序; &能够快速找到PIC各种型号单片机的汇编语 言模板并编写简单程序。 81 4.7 思考与练习 &4.1 PIC中档单片机的指令集有多少条指令?请默写出这 些指令。 &4.2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论