找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1931|回复: 12
收起左侧

用MPLAB写一个十六进制加法的汇编代码出现问题

[复制链接]
ID:598304 发表于 2019-11-21 20:25 | 显示全部楼层 |阅读模式
刚学汇编,想请问一下大家:
用MPLAB写一个十六进制加法的汇编代码,其中判断进位那个一直出现错误是啥原因。
51hei图片20191121202350.png
51hei图片20191121202354.png
回复

使用道具 举报

ID:401564 发表于 2019-11-22 08:33 | 显示全部楼层
这个汇编编译器不会像KEIL这样自动根据单片机来包含头文件,你得在代码最开始的地方先添加一个像这样的包含指令
#include <p16f877a.inc>       
接下来还要一段代码来指定单片机使用晶振,复位电压之类的,就像这样:
__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF;
这个代码是在烧录界面,先由你自己设定,然后生成代码,复制就可以了

汇编很麻烦的,如果不是工程指定要求用汇编的话,最好还是用C吧
但如果是PIC的12XX和16XX系列,特别是OTP型,我倒是见过很多指定用汇编的
回复

使用道具 举报

ID:598304 发表于 2019-11-22 21:58 | 显示全部楼层
Y_G_G 发表于 2019-11-22 08:33
这个汇编编译器不会像KEIL这样自动根据单片机来包含头文件,你得在代码最开始的地方先添加一个像这样的包含 ...

首先真的非常感谢您的回答。
因为我们课程用的是汇编,老师讲的也很匆忙所以有些地方没有讲得很好,所以有些地方不是很懂,现在懂了。
很感谢!!!
回复

使用道具 举报

ID:401564 发表于 2019-11-23 10:16 | 显示全部楼层
傲娇的兽兽! 发表于 2019-11-22 21:58
首先真的非常感谢您的回答。
因为我们课程用的是汇编,老师讲的也很匆忙所以有些地方没有讲得很好,所以 ...

现在竟然还有教学PIC汇编的
我用8051汇编两年,才去学的PIC16系列的汇编,依然觉得很吃力对于PIC汇编,你最好学会伪指令,这会让你能更好的学习,而且效率也会高很多的
以下是一段代码的开始部分,你可以参考一下:

  #include <p16f877a.inc>        ;包含了PIC16F877A的寄存器声称文件,像C,F,W之类的就可以直接引用了
    __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF;配置设置生成的代码,这个代码有的编译器是在软件烧录,或者是在配置选项那,先配置好,再生成代码,然后复制到这里的

    CBLOCK  020H                ;定义连续变量,CBLOCK  020H,这是一个伪指令,意思就是从20H开始连续定义变量,之后就可以在代码中使用了
    COUNT                                 ;计数用的,COUNT   在定义之后,相当021H地址,但用COUNT更加直观一点,
    DEL1                                  ;用在延时子程序中
    DEL2                                   ;用在延时子程序中
    DISP_ADDR                        ;显示地址用寄存器
    DISP_DATA                        ;显示数据用寄存器
    LED_1                                  ;七段码的个位
    LED_10                                   ;七段码的十位
    LED_100                        ;七段码的百位
    DIV_DATA                        ;除法用寄存器
    DATA_BUF                        ;数据写入和读出用的缓冲器
    SESHI                        ;测试用寄存器
    ENDC                        ;结束定义
#define    S1        PORTB,0                ;按置S1
#define    S2        PORTB,1                ;按置S2
#define    S3        PORTB,2                ;按置S3
#define           COM0        PORTD,0                ;
#define           COM1        PORTD,1                ;
#define           COM2        PORTD,2                ;
#define           COM3        PORTD,3                ;定义几个显示的RA端口
#define            CN        STATUS,0        ;C为标志位,减法有借位=0,无借位=1
#define            CS        PORTD,4                ;片选信号线
#define            SK        PORTD,5                ;时钟信号线
#define            D_I        PORTD,6                ;数据输入信号线
#define            D_O        PORTD,7                ;数据输出信号线

回复

使用道具 举报

ID:598304 发表于 2019-11-23 20:00 | 显示全部楼层
Y_G_G 发表于 2019-11-23 10:16
现在竟然还有教学PIC汇编的
我用8051汇编两年,才去学的PIC16系列的汇编,依然觉得很吃力对于PIC汇编,你最 ...

哈哈哈,感谢感谢,我存着慢慢学
回复

使用道具 举报

ID:598304 发表于 2019-11-24 12:18 | 显示全部楼层
Y_G_G 发表于 2019-11-23 10:16
现在竟然还有教学PIC汇编的
我用8051汇编两年,才去学的PIC16系列的汇编,依然觉得很吃力对于PIC汇编,你最 ...

我还有个小小的问题,关于减法借位:
比如说我想FE-FF,结果是-1,但是我想让他从高位借位1在减可以实现吗
回复

使用道具 举报

ID:401564 发表于 2019-11-25 08:47 | 显示全部楼层
大于十进制255的数值都是这样运算的,不管是加法还是减法
减法运算就通过检测标志位来决定高位要不要减1
没有借位就跳过下一条指令,高位值不变
有借位,高位就减1,高位减1
汇编高于8位的加减运算是比较麻烦的事,每次运算之后都要检测一下标志位,都要考虑到值有可能是会大于255的结果.


回复

使用道具 举报

ID:372021 发表于 2019-11-25 10:08 | 显示全部楼层
受教了,谢谢
回复

使用道具 举报

ID:18297 发表于 2019-11-25 10:59 | 显示全部楼层
PIC的汇编也是需要添加头文件的。
比如你这个的status和C必须在头文件定义。
看对应的单片机型号的datasheet参看它的地址。
如下定义:
STATUS       EQU        03H
C                EQU        0H
回复

使用道具 举报

ID:598304 发表于 2019-11-25 21:31 | 显示全部楼层
zjjhtony 发表于 2019-11-25 10:59
PIC的汇编也是需要添加头文件的。
比如你这个的status和C必须在头文件定义。
看对应的单片机型号的datash ...

好,非常感谢~
回复

使用道具 举报

ID:598304 发表于 2019-11-25 21:33 | 显示全部楼层
Y_G_G 发表于 2019-11-25 08:47
大于十进制255的数值都是这样运算的,不管是加法还是减法
减法运算就通过检测标志位来决定高位要不要减1
...

嗯,我八位减一次就判断一下大小,现在可以了
回复

使用道具 举报

ID:401564 发表于 2019-11-26 14:50 | 显示全部楼层
汇编很少有人用的,如果要用汇编,基本就是对某些条件要求很高地方才用到的
比如时序要求相当高的,或者是片上资源很有限的,就会要求用汇编
如果你是要学汇编,你这程序一定要再加一个显示结果的,然后再烧录到学习板上验证一下,很多汇编的结果是不能仿真或者想当然出来的
回复

使用道具 举报

ID:598304 发表于 2019-11-26 17:56 | 显示全部楼层
Y_G_G 发表于 2019-11-26 14:50
汇编很少有人用的,如果要用汇编,基本就是对某些条件要求很高地方才用到的
比如时序要求相当高的,或者是片 ...

嗯嗯,我会试一下,谢谢昂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表