📄 compare.asm
字号:
;********************************************************************************
;* *
;* File : 实验板compare.asm *
;* Function : 模拟比较器练习 *
;* Date : 2006-05-07 *
;* Version : 1.0 *
;* *
;* Author : 开关电源 hongtusy@163.com *
;* Company : 电子信息技术咨询网 http://www.itsn.cn *
;* *
;****************************描述与记事******************************************
;实验板的AVR程序,调节电位器,使模拟比较器输出反转,用LED指示输出结果。
;接线定义:PC(SW1-1~8)LED数据端 PB3-AIN1输入端(SW3-3) PB2-AIN0输入端(SW3-4)
; SW3-8为系统复位端,SW5-7为蜂鸣器输出端,SW6-1为LED公共地。
;记事:本程序旨在对模拟比较器的理解与演示,程序适合初学者使用。
;提示:当AIN0上的电压高于AIN1上的电压时,比较器输出ACO置位。
;具体电路可参照使用指南里的说明。
;使用器件:ATMEGA8535,可更换。 使用默认的片内RC振荡器,1MHz。
;********************************************************************************
.include "8535def.inc" ;定义头文件。
.org 0x0000 ;指定开始地址。
rjmp reset ;转移到“RESET”句。
.org 0x10
reset: ldi r16,0x02 ;设置堆栈指针0x025f
out sph,r16
ldi r16,0x5f
out spl,r16
;**************
ldi r16,0x00 ;口设置实际对比较的功能没有影响,但是设置了输出和内部上拉后,
out ddrb,r16 ;电位器的电压就改变了。因此我们设置为输入和不加上拉,这样电位器的电压没有被改变。
ldi r16,0x00
out portb,r16
ldi r16,0xff
out ddrc,r16 ;PC为输出
out ddra,r16
out porta,r16 ;蜂鸣器关闭
ldi r16,0x00
out portc,r16 ;PC口的LED关闭
;--------------------
ldi r16,0x00 ;模拟比较器使能
out acsr,r16
;刚上电,先闪烁3次。
rcall ledout
rcall ledout
rcall ledout
;%%%%%%%%%输入检测%%%%%%%,此时调节电位器VR2,可以使比较器反转,可以听到报警声,LED开始闪烁,需要反跳即可静止。
loop: in r21,acsr
sbrc r21,5 ;位ACO为0跳行语句
rcall ledout ;若该位为1(比较器没动作)就跳过该行,若感应到了就输出。
rjmp loop
;-------------LED闪烁/蜂鸣器响程序------------------
ledout: ldi r17,0xff ;点亮发光管
out portc,r17 ;输出端口,数据输出,
out porta,r17 ;蜂鸣器关闭
rcall londel ;延迟
ldi r17,0x00 ;关闭输出
out portc,r17
out porta,r17 ;蜂鸣器响
rcall londel ;延迟
ldi r17,0xff
out porta,r17 ;蜂鸣器关闭
ret
;#################短延迟程序##################
del: ldi r18,0x8F
loop1: dec r18
brne loop1
nop
ret
;###################钳套的延迟程序################
londel: ldi r19,0xff
loop2: rcall del
rcall del
dec r19
brne loop2
ret
;##################end###############
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -