mapengji 发表于 2024-8-21 00:11:37

本帖最后由 mapengji 于 2024-8-21 14:20 编辑

汇编部分又重新看了一遍。 把后面不懂的概念重新理清楚了 。结合下面的资料。已经能看懂 实例程序里面的汇编程序逻辑了。

mapengji 发表于 2024-8-21 14:16:24

本帖最后由 mapengji 于 2024-8-21 14:19 编辑

花时间整理的。如果有理解错误的地方请大神指出

mapengji 发表于 2024-8-22 12:01:30

本帖最后由 mapengji 于 2024-8-22 15:00 编辑

陈老师的汇编模版。没有试验箱,没有实际运行。。但是编译能通过。
/////-----------------头文件------------------------------------------------------------------------
$NOMOD51
$INCLUDE (STC8H.H)      ;包含STC8H8K64U单片机寄存器定义头文件
/////---------------------------------------------------------------------------------------------------
//--------------------------中断跳转入口地址----------------------------
//-------------------------------------------------------------------------------
      ORG                0000H
      LJMP      MAIN                        ;跳转到主程序
      ORG                0003H
      LJMP      INT0_ISR      ;外部中断0入口
      ORG                000BH
      LJMP      T0_ISR                        ;定时器0中断入口
      ORG                0013H
      LJMP      INT1_ISR                ;外部中断1入口
      ORG                001BH
      LJMP      T1_ISR                        ;定时器1中断入口
      ORG                0023H
      LJMP      UART1_ISR                ;串口1中断入口
      ORG                002BH
      LJMP      ADC_ISR                        ;ADC中断服务程序入口
      ORG                0033H
      LJMP      LVD_ISR                        ;低电压检测中断服务程序入口
      ORG                003BH
      LJMP      PCA_ISR                        ;PCA中断服务程序入口   
      ORG                0043H
      LJMP      UART2_ISR                ;串口2中断服务程序入口
      ORG                004BH
      LJMP      SPI_ISR                        ;SPI中断服务程序入口
      ORG                0053H
      LJMP      INT2_ISR                ;INT2中断服务程序入口
      ORG                005BH
      LJMP      INT3_ISR                ;INT3中断服务程序入口
      ORG                0063H
      LJMP      T2_ISR                        ;定时器2中断服务程序入口      
      ORG                0083H
      LJMP      INT4_ISR                ;INT4中断服务程序入口
      ORG                008BH
      LJMP      UART3_ISR                ;UART3中断服务程序入口
      ORG                0093H
      LJMP      UART4_ISR                ;UART4中断服务程序入口
      ORG                009BH
      LJMP      T3_ISR                        ;T3中断服务程序入口
      ORG                00A3H
      LJMP      T4_ISR                        ;T4中断服务程序入口
      ORG                00ABH
      LJMP      CMP_ISR                        ;比较器中断服务程序入口
      ORG                00C3H
      LJMP      I2C_ISR                ;I2C中断服务程序入口
      ORG                00CBH
      LJMP      USB_ISR                ;USB中断服务程序入口
      ORG                00D3H
      LJMP      PWMA_ISR               ;PWMA中断服务程序入口
      ORG                00DBH
      LJMP      PWMB_ISR               ;PWMB中断服务程序入口
      ORG                011BH
      LJMP      TKSU_ISR               ;触摸按键中断服务程序入口(STC8H8K64U单片机没有该中断)
      ORG                0123H
      LJMP      RTC_ISR               ;RTC中断服务程序入口
      ORG                012BH
      LJMP      P0_ISR               ;P0中断服务程序入口
      ORG                0133H
      LJMP      P1_ISR               ;P1中断服务程序入口
      ORG                013BH
      LJMP      P2_ISR               ;P2中断服务程序入口
      ORG                0143H
      LJMP      P3_ISR               ;P3中断服务程序入口
      ORG                014BH
      LJMP      P4_ISR               ;P4中断服务程序入口
      ORG                0153H
      LJMP      P5_ISR               ;P5中断服务程序入口
      ORG                015BH
      LJMP      P6_ISR               ;P6中断服务程序入口
      ORG                0163H
      LJMP      P7_ISR               ;P7中断服务程序入口
      ORG                017BH
      LJMP      DMA_M2M_ISR   ;DMA_M2M中断服务程序入口      
      ORG                0183H
      LJMP      DMA_ADC_ISR   ;DMA_ADC中断服务程序入口
      ORG                018BH
      LJMP      DMA_SPI_ISR   ;DMA_SPI中断服务程序入口
      ORG                0193H
      LJMP      DMA_UR1T_ISR    ;DMA_UR1T中断服务程序入口
      ORG                019BH
      LJMP      DMA_UR1R_ISR    ;DMA_UR1R中断服务程序入口
      ORG                01A3H
      LJMP      DMA_UR2T_ISR    ;DMA_UR2T中断服务程序入口
      ORG                01ABH
      LJMP      DMA_UR2R_ISR    ;DMA_UR2R中断服务程序入口
      ORG                01B3H
      LJMP      DMA_UR3T_ISR    ;DMA_UR3T中断服务程序入口
      ORG                01BBH
      LJMP      DMA_UR3R_ISR    ;DMA_UR3R中断服务程序入口
      ORG                01C3H
      LJMP      DMA_UR4T_ISR    ;DMA_UR4T中断服务程序入口
      ORG                01CBH
      LJMP      DMA_UR4R_ISR    ;DMA_UR4R中断服务程序入口
      ORG                01D3H
      LJMP      DMA_LCM_ISR   ;DMA_LCM中断服务程序入口
      ORG                01DBH
      LJMP      LCM_ISR             ;LCM中断服务程序入口
    ORG            0200H
               
//-------------------------------------------------------------------------------
//---------------------程序开始------------------------------------
//-------------------------------------------------------------------------------
MAIN:
      MOV                SP,#80H                  ;设置堆栈指针
      ;程序写这里
MAINLOOP:                                        ;主程序循环
      
      LJMP      MAINLOOP
//-------------------------中断服务-----------------------------------------------------------
//-有中断函数屏蔽复位程序,
//--------------------------------------------------------------------------------------------
INT0_ISR:      ;外部中断0中断服务子程序
                                 
      MOV      IAP_CONTR,#20H            ;复位
      RETI
T0_ISR:                        ;定时器0中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
INT1_ISR:                ;外部中断1中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
T1_ISR:                        ;定时器1中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
UART1_ISR:                ;串口1中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
ADC_ISR:                ;ADC中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
LVD_ISR:                ;低电压检测中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
PCA_ISR:                ;PCA中断服务子程序   
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
UART2_ISR:                ;串口2中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
SPI_ISR:                ;SPI中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
INT2_ISR:                ;INT2中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
INT3_ISR:                ;INT3中断服务子程序
      ;加程序;
      MOV      IAP_CONTR,#20H            ;复位
      RETI
T2_ISR:                        ;定时器2中断服务子程序      
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
INT4_ISR:                ;INT4中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
UART3_ISR:                ;UART3中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
UART4_ISR:                ;UART4中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
T3_ISR:                        ;T3中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ; 复位
      RETI
T4_ISR:                        ;T4中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ; 复位
      RETI
CMP_ISR:                ;比较器中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ; 复位
      RETI
I2C_ISR:               ;I2C中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ; 复位
      RETI
USB_ISR:               ;USB中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
PWMA_ISR:            ;PWMA中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
PWMB_ISR:            ;PWMB中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
TKSU_ISR:            ;触摸按键中断服务子程序(STC8H8K64U单片机没有该中断)
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
RTC_ISR:            ;RTC中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
P0_ISR:               ;P0中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
P1_ISR:               ;P1中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
P2_ISR:               ;P2中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
P3_ISR:               ;P3中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
P4_ISR:               ;P4中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
P5_ISR:               ;P5中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
P6_ISR:               ;P6中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
P7_ISR:               ;P7中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_M2M_ISR:    ;DMA_M2M中断服务子程序      
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_ADC_ISR:    ;DMA_ADC中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
DMA_SPI_ISR:    ;DMA_SPI中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_UR1T_ISR:   ;DMA_UR1T中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_UR1R_ISR:   ;DMA_UR1R中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_UR2T_ISR:   ;DMA_UR2T中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_UR2R_ISR:   ;DMA_UR2R中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_UR3T_ISR:   ;DMA_UR3T中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
DMA_UR3R_ISR:   ;DMA_UR3R中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_UR4T_ISR:   ;DMA_UR4T中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H            ;复位
      RETI
DMA_UR4R_ISR:   ;DMA_UR4R中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
DMA_LCM_ISR:    ;DMA_LCM中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
LCM_ISR:             ;LCM中断服务子程序
      ;加程序
      MOV      IAP_CONTR,#20H             ;复位
      RETI
//-------------------------------------------------------------------------------      
//--------自己写的子程序------------------
//-------------------------------------------------------------------------------
      
      
      
      
      
      END;程序结束,
      

mapengji 发表于 2024-8-22 15:01:35

第十一集
C51 扩展关键词_at_ , sbit, sfr, bit, sfr16,idata,bdata,xdata,pdata,code,alien,small,compact,large,reentrant,interrupt,_task_.
C51 支持数据类型。bit* 位数1位   字节 1/8   取值范围   0或1,sbit* 位数1位    字节 1/8      取值范围 0~1 ,sfr* 位数8位      字节 1   取值范围0x80-0xff,
sfr16* 位数16位    字节 2    取值范围0x80~0xff,(占2个连续字节)
指针很重要。内部储存空间   以后不能用Pdata,    volatile--不要进行优化编译。关系运算。

qike009 发表于 2024-8-22 15:37:09

这个老师讲的不错   但是汇编学了感觉没啥用

mapengji 发表于 2024-8-22 16:15:53

第十二集   分析了一个流水灯实例,    分析了EEPROM的程序,

mapengji 发表于 2024-8-22 16:19:45

qike009 发表于 2024-8-22 15:37
这个老师讲的不错   但是汇编学了感觉没啥用

虽然我们现在不用汇编语言编程,但是可以帮助理解单片机内部结构。

mapengji 发表于 2024-8-23 12:26:27

本帖最后由 mapengji 于 2024-8-23 12:30 编辑

第十三 十四 集 中断。以前也听过其他老师讲过中断。看程序设置中断的时候 总是分不清什么时候设置 那个寄存器。陈老师分析了 下面的图以后才彻底明白,

mapengji 发表于 2024-8-23 12:28:55

本帖最后由 mapengji 于 2024-8-23 12:43 编辑

还有一个 就是 操作寄存器的时候 ,经常看到。有些可以位操作。有的就不行。现在才明白。寄存器地址能被8整除的才可以。


中断 优先级
1.不同级的中断源同时申请中断时,先高后低;(就是上图的顺序。从高到底。)
2.处理低级中断又收到高级中断请求时,停低转高;
3.处理高级中断却收到低级中断请求时,高不睬低;
4.同一级的中断源同时申请中断时,事先规定。

中断不响应
1,中断允许总控制位EA=0或发出中断请求的中断所对应的中断允许控制位为0。
2.CPU正在执行一个同级或高一级的中断服务程序。
3.当前执行的机器周期不是指令周期的最后一个机器周期。
4.正在执行的指令是中断返回指令RETI或者是访问专用寄存器IE或IP的指令时,CPU至少要再执行一条指令才能响应中断请求。

中断标志位清除-----中断被CPU响应后。清除标志位,不然cpu进入中断请求死循环,
1,硬件自动
2.软件手动清除

阿杰爱学单片机 发表于 2024-8-23 13:44:14

mapengji 发表于 2024-8-16 23:06
笔记整理。 汇编语言的指令通常由操作码和操作数组成,操作码指出的是要对操作数进行什么操作。操作数指 ...

好家伙一点看不懂
页: 1 [2] 3
查看完整版本: 打卡学习记录贴 8H8K64U陈老师教学