Y_G_G 发表于 2019-11-26 14:50 嗯嗯,我会试一下,谢谢昂 |
汇编很少有人用的,如果要用汇编,基本就是对某些条件要求很高地方才用到的 比如时序要求相当高的,或者是片上资源很有限的,就会要求用汇编 如果你是要学汇编,你这程序一定要再加一个显示结果的,然后再烧录到学习板上验证一下,很多汇编的结果是不能仿真或者想当然出来的 |
Y_G_G 发表于 2019-11-25 08:47 嗯,我八位减一次就判断一下大小,现在可以了 |
zjjhtony 发表于 2019-11-25 10:59 好,非常感谢~ |
PIC的汇编也是需要添加头文件的。 比如你这个的status和C必须在头文件定义。 看对应的单片机型号的datasheet参看它的地址。 如下定义: STATUS EQU 03H C EQU 0H |
受教了,谢谢 |
大于十进制255的数值都是这样运算的,不管是加法还是减法 减法运算就通过检测标志位来决定高位要不要减1 没有借位就跳过下一条指令,高位值不变 有借位,高位就减1,高位减1 汇编高于8位的加减运算是比较麻烦的事,每次运算之后都要检测一下标志位,都要考虑到值有可能是会大于255的结果. |
Y_G_G 发表于 2019-11-23 10:16 我还有个小小的问题,关于减法借位: 比如说我想FE-FF,结果是-1,但是我想让他从高位借位1在减可以实现吗 |
Y_G_G 发表于 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 ;数据输出信号线 |
Y_G_G 发表于 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型,我倒是见过很多指定用汇编的 |