📄 dac.s
字号:
.module DAC.c
.area text(rom, con, rel)
.dbfile C:\icc\examples.avr\mypractice\DAC_prj\DAC.c
.dbfunc e delay _delay fV
; i -> R20,R21
; j -> R22,R23
; ms -> R16,R17
.even
_delay::
rcall push_gset2
.dbline -1
.dbline 8
; #include <iom16v.h>
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int
; //#include "Skey.c"
;
; void delay(uint ms)
; {
.dbline 10
; uint i,j;
; for(i=0;i<ms;i++)
clr R20
clr R21
rjmp L5
L2:
.dbline 11
; {
.dbline 12
clr R22
clr R23
rjmp L9
L6:
.dbline 12
L7:
.dbline 12
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 12
cpi R22,117
ldi R30,4
cpc R23,R30
brlo L6
.dbline 13
L3:
.dbline 10
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 10
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
.dbline 14
; for(j=0;j<1141;j++);
; }
; }
L1:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 i
.dbsym r ms 16 i
.dbend
.dbfunc e key_press _key_press fc
; j -> R16
.even
_key_press::
.dbline -1
.dbline 17
;
; uchar key_press()
; {
.dbline 19
; uchar j;
; DDRD|=0X0F;
in R24,0x11
ori R24,15
out 0x11,R24
.dbline 20
; PORTD|=0X0F;
in R24,0x12
ori R24,15
out 0x12,R24
.dbline 22
;
; DDRD&=0XF0;
in R24,0x11
andi R24,240
out 0x11,R24
.dbline 24
;
; j=PIND;
in R16,0x10
.dbline 25
; j=j&0X0F;//00001111
andi R16,15
.dbline 26
; if(j==0X0F)
cpi R16,15
brne L11
.dbline 27
; {
.dbline 28
; return 0;
clr R16
rjmp L10
L11:
.dbline 31
; }
; else
; {
.dbline 32
; return 1;
ldi R16,1
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r j 16 c
.dbend
.dbfunc e key_scan _key_scan fc
; key -> R20
.even
_key_scan::
rcall push_gset2
.dbline -1
.dbline 38
; }
;
; }
;
; uchar key_scan()
; {
.dbline 40
; uchar key;
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 41
; if(key_press())
rcall _key_press
tst R16
breq L14
.dbline 42
; {
.dbline 43
; key=PIND;
in R20,0x10
.dbline 44
; key&=0X0F;
andi R20,15
.dbline 45
; switch(key)
mov R22,R20
clr R23
cpi R22,7
ldi R30,0
cpc R23,R30
breq L22
cpi R22,11
ldi R30,0
cpc R23,R30
breq L21
cpi R22,13
ldi R30,0
cpc R23,R30
breq L20
cpi R22,14
ldi R30,0
cpc R23,R30
breq L19
rjmp L16
X0:
.dbline 46
; {
L19:
.dbline 48
; case 0X0E:
; key=0;
clr R20
.dbline 49
; break;
rjmp L24
L20:
.dbline 51
; case 0X0D:
; key=1;
ldi R20,1
.dbline 52
; break;
rjmp L24
L21:
.dbline 54
; case 0X0B:
; key=2;
ldi R20,2
.dbline 55
; break;
rjmp L24
L22:
.dbline 57
; case 0X07:
; key=3;
ldi R20,3
.dbline 58
; break;
rjmp L24
L16:
.dbline 60
; default:
; key=0;
clr R20
.dbline 61
; }
L23:
.dbline 62
L24:
.dbline 62
; while(key_press());
rcall _key_press
tst R16
brne L23
.dbline 63
; }
rjmp L15
L14:
.dbline 65
; else
; {
.dbline 66
; key=0;
clr R20
.dbline 67
; }
L15:
.dbline 68
; return key;
mov R16,R20
.dbline -2
L13:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r key 20 c
.dbend
.dbfunc e spi_init _spi_init fV
.even
_spi_init::
.dbline -1
.dbline 72
; }
;
; void spi_init()
; {
.dbline 73
; DDRB|=0XA0;
in R24,0x17
ori R24,160
out 0x17,R24
.dbline 74
; DDRA|=BIT(PA1);
sbi 0x1a,1
.dbline 75
; SPCR=0X57;
ldi R24,87
out 0xd,R24
.dbline -2
.dbline 76
; }
L26:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ad5300 _ad5300 fV
; temp2 -> R22
; temp1 -> R20
; status -> R22
; daword -> R10
.even
_ad5300::
rcall push_gset3
mov R10,R16
.dbline -1
.dbline 78
; void ad5300(uchar daword)
; {
.dbline 79
; uchar temp1=0,temp2=0,status;
clr R20
.dbline 79
clr R22
.dbline 80
; temp1|=daword<<4;//1101 1001
mov R24,R10
andi R24,#0x0F
swap R24
or R20,R24
.dbline 81
; temp2|=daword>>4;
mov R24,R10
swap R24
andi R24,#0x0F
or R22,R24
.dbline 83
;
; PORTA&=~BIT(PA1);
cbi 0x1b,1
.dbline 84
; SPSR=0;
clr R2
out 0xe,R2
.dbline 85
; SPDR=temp2;
out 0xf,R22
L28:
.dbline 87
; do
; {
.dbline 88
; status=SPSR;
in R22,0xe
.dbline 89
L29:
.dbline 89
; }while(!(status&=0X80));
mov R24,R22
andi R24,128
mov R22,R24
tst R24
breq L28
.dbline 91
;
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 92
; SPSR=0;
clr R2
out 0xe,R2
.dbline 93
; SPDR=temp1;
out 0xf,R20
L31:
.dbline 95
; do
; {
.dbline 96
; status=SPSR;
in R22,0xe
.dbline 97
L32:
.dbline 97
; }while(!(status&=0X80));
mov R24,R22
andi R24,128
mov R22,R24
tst R24
breq L31
.dbline 98
; SPSR=0;
clr R2
out 0xe,R2
.dbline 99
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 100
; PORTA|=BIT(PA1);
sbi 0x1b,1
.dbline -2
.dbline 101
; }
L27:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp2 22 c
.dbsym r temp1 20 c
.dbsym r status 22 c
.dbsym r daword 10 c
.dbend
.dbfunc e main _main fV
; data -> R20
; i -> R10
.even
_main::
.dbline -1
.dbline 103
; void main()
; {
.dbline 104
; uchar i,data=128;
ldi R20,128
.dbline 105
; DDRB=0XFF;
ldi R24,255
out 0x17,R24
.dbline 106
; spi_init();
rcall _spi_init
.dbline 107
; ad5300(0);
clr R16
rcall _ad5300
.dbline 108
; ad5300(data);
mov R16,R20
rcall _ad5300
rjmp L36
L35:
.dbline 111
;
; while(1)
; {
.dbline 112
; if(key_press())
rcall _key_press
tst R16
breq L38
.dbline 113
; {
.dbline 114
; i=key_scan();
rcall _key_scan
mov R10,R16
.dbline 115
; switch(i)
mov R22,R10
clr R23
cpi R22,0
cpc R22,R23
breq L43
X1:
cpi R22,1
ldi R30,0
cpc R23,R30
breq L44
cpi R22,2
ldi R30,0
cpc R23,R30
breq L45
cpi R22,3
ldi R30,0
cpc R23,R30
breq L46
rjmp L40
X2:
.dbline 116
; {
L43:
.dbline 118
; case 0:
; data=data+16;
subi R20,240 ; addi 16
.dbline 119
; break;
rjmp L41
L44:
.dbline 121
; case 1:
; data=data-16;
subi R20,16
.dbline 122
; break;
rjmp L41
L45:
.dbline 124
; case 2:
; data=0;
clr R20
.dbline 125
; break;
rjmp L41
L46:
.dbline 127
; case 3:
; data=255;
ldi R20,255
.dbline 128
; break;
L40:
L41:
.dbline 130
; }
; ad5300(data);
mov R16,R20
rcall _ad5300
.dbline 131
; }
L38:
.dbline 132
L36:
.dbline 110
rjmp L35
X3:
.dbline -2
.dbline 133
; }
; }
L34:
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r i 10 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -