单片机汇编语言程序学习

文章介绍了使用汇编语言编写单片机程序,包括设置中断向量、开启中断、外部中断0的电平触发和跳沿触发模式。程序实现了8个灯的闪灭及中断后流水熄灭效果,同时解释了相关指令的作用,如CPL、MOV、JMP等,并给出了延迟子程序和中断服务子程序的详细代码。
摘要由CSDN通过智能技术生成

这学期选修了单片机原理与应用,老师非让用汇编来写入程序。

没办法,记录一下一些知识吧,因为不太熟悉,也不熟练,很容易学过就忘。

      org   0000h
      jmp   Start
      ORG	0003H
      JMP	INT00
      ORG   0100H
Start:	
      MOV 	SP,#60H
      SETB	EA
      SETB	EX0
      Clr   IT0 
      CLR 	A  
Loop:	
	  CPL  	A  
	  MOV	P0,A  
	  LCALL DELAY 
      JMP  	Loop


DELAY: 
	  MOV 	R6,#200
D1:      
	  MOV 	R7,#248   
      DJNZ 	R7,$      
      DJNZ 	R6,D1
      RET 

;----中断子程序程序示例------
INT00:
	  MOV 	R1,#9
	  MOV	A,#00H
 LOOP1:		 
	  MOV	P0,A   
	  LCALL	DELAY		
	  SETB	C 
	  RRC	A 
	  DJNZ 	R1,LOOP1
	  RETI 

 程序效果:

Start部分使8个灯不断闪灭

通过按键引起中断后,执行中断子程序INT00

8个灯流水熄灭,执行完毕,继续不断闪灭。

代码段注释:

      ;---’;’代表注释
      org   0000h
      ;org指令?
      ;org 0000h代表什么含义呢?
      ;org 0000h是一条汇编伪指令,它指定下一条语句将在哪里开始
      ;在汇编时不产生相应的机器语言指令,只是指导程序该从哪里开始
      jmp   Start
      ;跳到Start处
      ORG	0003H
      ;0003H是外部中断INT0的入口地址
	  ;加这条伪指令是为了方便系统找到中断指令
	  ;ps:依然不太懂
      JMP	INT00
	  ;跳转到中断INT0函数位置
      ORG  0100H
Start:	
      MOV 	SP,#60H
	  ;避免堆栈区与工作寄存器区发生冲突
      SETB	EA
      ;SETB:对位置1
      ;EA:中断允许总开关控制位,EA=0,所有中断请求被屏蔽,EA=1,所有的中断请求被开放
	  ;开中断
      SETB	EX0
	  ;允许外部中断0
      ;EX0:外部中断0的溢出中断允许位,为0禁止外部中断0中断。
      ClR   IT0 ;外部中断0为电平触发
      ;IT0=1,外部中断0为跳沿触发
      CLR 	A  ;累加器清0
Loop:	
      ;累加器是一个8位寄存器
	  CPL  	A  ;累加器求反
	  MOV	P0,A  
 	  ;这里的效果是8个灯不断闪灭
      ;把p0的一个位 置为0,对应的灯会亮。
	  LCALL DELAY ;调用延时函数
      JMP  	Loop
;--------延时子程序--------
DELAY: 
	MOV 	R6,#200   ;外循环次数
D1:      
	MOV 	R7,#248   
    DJNZ 	R7,$      
    ;相当于here: DJNZ R7,here
    ;$指本条指令的地址
    ;寄存器减1,不为0则转移
    ;也就是循环执行这条语句248次
    DJNZ 	R6,D1
    ;如果循环够了200次,就跳出去
    RET 
    ;子程序返回
;----中断子程序程序示例------
INT00:
	  MOV 	R1,#9
	  MOV	A,#00H
 LOOP1:		 
	  MOV	P0,A   ;最开始全亮
	  LCALL	DELAY  ;延时1s
	  SETB	C      ;进位标志位C设为1
	  RRC	A      ;经过进位标志位的累加器循环右移
	  DJNZ 	R1,LOOP1
	  ;R1减一,不为0则转移
	  RETI ;中断返回
;0000 0000
;C, P7,P6,P5,P4,P3,P2,P1,P0
;1--->
;1000 0000
;1100 0000
;1110 0000
;1111 0000
;1111 1000
;1111 1100
;1111 1110
;1111 1111

跳沿触发和电平触发有什么不同???

跳沿触发:即便CPU暂时不能响应,中断请求标志也不会丢失。(依然没明白)。

电平触发:外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断

输入引脚的电平变化而变化,这能提高CPU对外部中断请求的响应速度

当外部中断源被设定为电平触发方式时,在中断服务程序返回之前,外部中断请求输入必须无效

(即外部中断请求输入已由低电平变为高电平),否则CPU返回主程序后会再次响应中断。

(不太懂,就这吧)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpl还在学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值