📄 io.s
字号:
.module io.c
.area text(rom, con, rel)
.dbfile E:\avr\2.1.5\io.c
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 8
; // 用途:理解AVR的端口操作,学习在AVR studio里面观查IO口状态
; // 连接:电源跳线,PB0接一个按键,PA口0~7接7段数码管的a~dp,7段数码管的ABCD接VCC
; // 注意:直接全速运行本程序,没有现实意义,请通过JTAG在线仿真,看各个IO口的状态,并且看数码管上的显示。
;
; #include <iom16v.h>
;
; void main(void)
; {
.dbline 9
; PORTA=0xff;
ldi R24,255
out 0x1b,R24
.dbline 10
; DDRA=0xff; //输出 模式 ,IO口上,1为输出,0为输入。
out 0x1a,R24
xjmp L3
L2:
.dbline 13
;
; while(1)
; {
.dbline 14
; PORTA = 0xf0; //等于 结果是:1111 0000
ldi R24,240
out 0x1b,R24
.dbline 15
; PORTA &=~ 0xf0; //清零 结果是:0000 0000
in R24,0x1b
andi R24,15
out 0x1b,R24
.dbline 16
; PORTA |= 0x77; //置一 结果是:0111 0111
in R24,0x1b
ori R24,119
out 0x1b,R24
.dbline 17
; PORTA ^= 0x70; //翻转 结果是:0000 0111
ldi R24,112
in R2,0x1b
eor R2,R24
out 0x1b,R2
.dbline 18
; PORTA = 0x00; //全部清零
clr R2
out 0x1b,R2
.dbline 21
;
; //下面理解下移位算法
; PORTA |=(1<<PA7); //PA7置1,结果是 1000 0000
sbi 0x1b,7
.dbline 22
; PORTA = ((1<<PA4)|(1<<PA5)|(1<<PA6)); // PA4 5 6置一,结果为 0011 1000
out 0x1b,R24
.dbline 23
; PORTA &=~((1<<PA4)|(1<<PA5)); //PA 4 5 清零, 结果为 0010 0000
in R24,0x1b
andi R24,207
out 0x1b,R24
.dbline 24
; PORTA ^= ((1<<PA5)|(1<<PA6)); //PA5 PA6 取反,结果为 0001 0000
ldi R24,96
in R2,0x1b
eor R2,R24
out 0x1b,R2
.dbline 27
;
; //下面理解下输入
; DDRB=0x01; //PB0 接个按键
ldi R24,1
out 0x17,R24
.dbline 28
; if((PINB&0x01)==0x01)
in R24,0x16
andi R24,1
cpi R24,1
brne L5
.dbline 29
; { //PB0为高,没有键盘按下
.dbline 30
; PORTA =0x00;
clr R2
out 0x1b,R2
.dbline 31
; }
xjmp L6
L5:
.dbline 33
; else
; { //PB0为低,按键按下
.dbline 34
; PORTA =0xFF;
ldi R24,255
out 0x1b,R24
.dbline 35
; }
L6:
.dbline 36
L3:
.dbline 12
xjmp L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -