PIC05循环程序结构.ppt

PIC05循环程序结构.ppt

ID:48088398

大小:332.50 KB

页数:27页

时间:2020-01-14

PIC05循环程序结构.ppt_第1页
PIC05循环程序结构.ppt_第2页
PIC05循环程序结构.ppt_第3页
PIC05循环程序结构.ppt_第4页
PIC05循环程序结构.ppt_第5页
资源描述:

《PIC05循环程序结构.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、例:对TRISA寄存器写入一个数据0FH。特殊功能寄存器TRISA的地址是85H,分布在RAM的体1(bank1)中,因此在传送数据之前要把RAM的体选码设置为01。BSF03H,5H;STATUS地址为03MOVWF85HMOVLW0FHBCF03H,5H;体选码还原为00以上程序简单,但是不容易读懂,假如配合使用伪指令,程序可以修改如下:STATUSEQU03H;定义符号STATUSRP0EQU5H;定义符号RP0TRISAEQU85H;定义符号TRISAORG0005HBSF03H,5H;STATUS地址为03MOVWF85HMOVLW0FHB

2、CF03H,5H;体选码还原为00程序中使用了伪指令,把程序中要用到的寄存器地址和位地址,用含义清晰的符号来定义。这样虽然增加了程序的长度,但程序的可读性却大大提高。§3.6顺序程序结构例:把RAM的20H单元的8位数据分成高4位和低4位字节,并分别存入21H和22H单元的低四位中,并将这2个单元的高4位补0。MOVF20H,0;将(20H)→WANDLW0FH;将W高4位清0MOVWF21H;W→21HSWAPF20H,0ANDLW0FH;将W高4位清0MOVWF22H;W→22H§3.7分支程序结构例:将RAM的20H单元和21H单元中最大的数存

3、入22H单元。将参与比较的数做减法运算,如果被减数小于减数,就会发生借位(C=0),否则,不发生借位(C=1)。判断标志位C的值,就可以挑出大数。STATUSEQU03H;定义符号STATUSCEQU0;定义符号CMOVF20H,0SUBWF21H,0;(21H)-W→WBTFSSSTATUS,C;C=1没借位,(21H)较大GOTOF20BIG;C=0有借位,(20H)较大F21BIGMOVF21H,0;(21H)→WMOVWF22HGOTOSTOPF20BIGMOVF20H,0;(20H)→WMOVWF22H;(W)→22HSTOPGOTOSTO

4、P;任务完成,原地等待由于PIC指令系统中没有停机指令,可以用无条件转移指令跳转到自身实现。§3.8循环程序结构例将RAM地址从30H开始的50个单元都清0。一个循环程序由以下四个组成部分:循环变量:一般是循环次数。循环体:要求重复执行的程序段。循环变量修改:为下一次的循环准备条件。循环控制:控制循环的结束。可以借助于间接寻址寄存器FSR,实现循环结构程序,程序片段如下:COUNTEQU20H;指定20H为循环变量FSREQU04H;定义符号FSRINDFEQU00H;指义符号INDFMOVLWD’50;给循环变量赋初值MOVWFCOUNTMOVLW

5、30H;将30H→FSRMOVWFFSRNEXTCLRFINDF;间接寻址INCFFSR,1;(FSR)+1→FSRDECFSZCOUNT,1;计数值减1,结果为0就;跳到STOP处GOTONEXT;执行下一次循环STOPGOTOSTOP;停机§3.9子程序结构例:假设在RAM中30H开始的3个单元中存放着3个不同数。现在要求编制一段程序,把3个数中最大的一个数找出,并放入40H单元。解:可以把前例比较2个数大小的程序改写成子程序SUB,再编写一个主程序MAIN来反复调用SUB。假设SUB子程序有2个入口参数X和Y和1个出口参数Z。STATUSEQU

6、03H;定义符号STATUSCEQU00;定义进位/借位标志CXEOU20H;定义X为子程序的入口参数YEQU21H;定义Y为子程序的入口参数ZEQU22H;定义Z为子程序的出口参数MAINMOVF30H,0;第1个数→XMOVWFXMOVF31H,0;第2个数→YMOVWFYCALLSUB;第1次调用于程序MOVFZ,0;将比较结果→XMOVWFXMOVF32H,0;第3个数→YMOVWFYCALLSUB;第2次调用子程序MOVFZ,0;最终结果Z→40HMOVWF40HSTOPGOTOSTOP;停机;子程序(入口参数:X和Y,出口参数:Z)SUB

7、MOVFX,0;将X→WSUBWFY,0;Y-W→WBTFSSSTATUS,C;若C=1,没发生借位,;Y>X,跳转到Y_BIGGOTOX_BIG;否则,X>=Y,并跳转Y_BIGMOVFY,0;将Y中的数送入WMOVWFZ;再将它转存到ZGOTOTHEEND;跳到程序末尾X_BIGMOVFX,0;将X中的数送入WMOVWFZ;再将它转存到ZTHEENDRETURN;子程序返回§3.10程序跨页跳转和跨页调用问题前面已经介绍过,16F87X单片机的片内FLASH程序存储器的容量分别为2K、4K和8K。在指令系统中,有二条引起程序长距离跳转的指令GOT

8、O和CALL,所携带的地址是11位的,也就只能在2K(一页)的地址范围内跳转。对于只有2KFLASH程序存储

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。