中国领先的工业平台

返回贤集网 返回微头条
贤集网技术微头条APP获取

[源码共享] 普通LED新用途源程序

 zhangshuhuan

下载贤集网APP入驻自媒体


汇编语言程序清单:

;************************************************************

.include “tn15def.inc”

.cseg       ;代码段声明

.org  0      ;定义代码段开始存放地址

; LED作为测光传感器使用

main:

ldi  r16,255   ;利用寄存器R16转存$FF

out  DDRB,r16  ;设置端口PB为输出

ldi  r16,0   ;利用R16转存$00

out  PORTB,r16  ;设定端口PB送出低电平

ldi  r19,1   ;利用R19设置最小延迟参数

rcall  delay   ;插入一个延时

ldi  r19,1   ;再次设置R19最小延迟参数

new_main:

sbi  DDRB,0   ;设置PB0引脚为输出脚

nop     ;利用空操作延时

nop

sbi  PORTB,1   ;定义引脚PB1输出高电平

cbi  PORTB,0  ;定义PB0出低,LED加正偏,发光!

rcall  delay   ;插入一个延时

sbi  PORTB,0   ;再定义引脚PB0输出高电平

cbi  PORTB,1  ;定义PB1出低,LED加反偏,测光!

cbi  DDRB,0   ;设置PB0脚为输入,LED电容放电

cbi  PORTB,0   ;禁止上拉功能,设为高阻输入

ldi  r19,1   ;在寄存器R19内设置最小延迟

wait_here:

sbis  PinB,0   ;若引脚PB0为高,则跳过一行

rjmp  its_one   ;跳转到its_one去执行

rcall  min_delay  ;插入另一个延时

inc  r19    ;延时参数加1

brne  dont_inc_r20 ;无溢出,跳转到dont_inc_r20

rjmp  over_flow  ;有溢出,跳转到over_flow去执行

dont_inc_r20:  

rjmp  wait_here  ;跳转到wait_here去执行

over_flow:

its_one:

in  r16,PORTB  ;读取端口PB状态到R16

ldi  r17,0b00001000 ;仅仅设置R17的bit3为1

eor  r16,r17   ;异或运算,仅反转PB3电平

out  PORTB,r16  ;输出与光强成正比的频率

mov  r2,r19   ;暂存R19内容

rcall  delay   ;插入一个延时

mov  r19,r2   ;恢复R19内容

rjmp  new_main  ;返回主循环程序

;===========================================

delay:

ldi  r20,0   ;清零R20,实为令R20=256

dec_r20:

dec  r20    ;R20减1

brne  dec_r20   ;不为0则跳回,循环

dec  r19    ;否则再令R19减1

brne  dec_r20   ;不为0则跳回,循环

ret     ;子程序返回

;===========================================

min_delay:

in  r0,SREG   ;保护状态寄存器内容

ldi  r18,200   ;设置循环次数,即令R18=200

not_over:

dec  r18    ;R18减1

brne  not_over  ;不为0则跳回,循环

out  SREG,r0   ;恢复状态寄存器内容

ret     ;子程序返回

;*********************************************


最新回复

还没有人回复哦,抢沙发吧~

发布回复

为您推荐

热门交流