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
笔记整理。 汇编语言的指令通常由操作码和操作数组成,操作码指出的是要对操作数进行什么操作。操作数指 ...
好家伙一点看不懂