📄 dac7512.lst
字号:
__start:
__text_start:
46 EFCF LDI R28,0xFF
47 E1D0 LDI R29,0x10
48 BFCD OUT 0x3D,R28
49 BFDE OUT 0x3E,R29
4A 51CE SUBI R28,0x1E
4B 40D0 SBCI R29,0
4C EA0A LDI R16,0xAA
4D 8308 STD Y+0,R16
4E 2400 CLR R0
4F E0E0 LDI R30,0
50 E0F1 LDI R31,1
51 E011 LDI R17,1
52 30E0 CPI R30,0
53 07F1 CPC R31,R17
54 F011 BEQ 0x0057
55 9201 ST R0,Z+
56 CFFB RJMP 0x0052
57 8300 STD Z+0,R16
58 E8EC LDI R30,0x8C
59 E0F0 LDI R31,0
5A E0A0 LDI R26,0
5B E0B1 LDI R27,1
5C E010 LDI R17,0
5D E000 LDI R16,0
5E BF0B OUT 0x3B,R16
5F 38EC CPI R30,0x8C
60 07F1 CPC R31,R17
61 F021 BEQ 0x0066
62 95C8 LPM
63 9631 ADIW R30,1
64 920D ST R0,X+
65 CFF9 RJMP 0x005F
66 940E 008B CALL _main
_exit:
68 CFFF RJMP _exit
FILE: E:\产品\开发板\mega128-board\实验程序\数模转换\单电压输出\dac7512.c
(0001) #include<iom128v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004)
(0005) //延时函数
(0006) void s_ms(unsigned int t)
(0007) {
(0008) for(;t>1;t--)
_s_ms:
t --> R16
69 C002 RJMP 0x006C
6A 5001 SUBI R16,1
6B 4010 SBCI R17,0
6C E081 LDI R24,1
6D E090 LDI R25,0
6E 1780 CP R24,R16
6F 0791 CPC R25,R17
70 F3C8 BCS 0x006A
71 9508 RET
(0009) {
(0010) }
(0011) }
(0012)
(0013) void spi_init()
(0014) {
(0015) DDRB=0xf7; //端口设置
_spi_init:
72 EF87 LDI R24,0xF7
73 BB87 OUT 0x17,R24
(0016) PORTB=0xff;
74 EF8F LDI R24,0xFF
75 BB88 OUT 0x18,R24
(0017) SPSR=0x00;
76 2422 CLR R2
77 B82E OUT 0x0E,R2
(0018) SPCR=0x5d; //主机模式 方式0 ocs/16
78 E58D LDI R24,0x5D
79 B98D OUT 0x0D,R24
7A 9508 RET
_spi_send:
spi_hi --> R12
spi_lo --> R10
spi_data --> R16
7B 940E 009F CALL push_xgset003C
(0019) }
(0020)
(0021) void spi_send(uint spi_data)
(0022) {
(0023) uchar spi_lo,spi_hi;
(0024) spi_lo=spi_data;
7D 2EA0 MOV R10,R16
(0025) spi_hi=spi_data>>8;
7E 0168 MOVW R12,R16
7F 2CCD MOV R12,R13
80 24DD CLR R13
(0026)
(0027) PORTB&=~(1<<0); //ss=0
81 98C0 CBI 0x18,0
(0028) SPDR=spi_hi;
82 B8CF OUT 0x0F,R12
(0029) while(!(SPSR&(1<<SPIF)));
83 9B77 SBIS 0x0E,7
84 CFFE RJMP 0x0083
(0030) SPDR=spi_lo;
85 B8AF OUT 0x0F,R10
(0031) while(!(SPSR&(1<<SPIF)));
86 9B77 SBIS 0x0E,7
87 CFFE RJMP 0x0086
(0032) PORTB|=(1<<0);
88 9AC0 SBI 0x18,0
89 940C 0094 JMP pop_xgset003C
(0033) }
(0034) //输出一个2.5v的电压
(0035) //主函数
(0036) main()
(0037) {
(0038) s_ms(50000); //等待7512复位
_main:
8B E500 LDI R16,0x50
8C EC13 LDI R17,0xC3
8D DFDB RCALL _s_ms
(0039) spi_init();
8E DFE3 RCALL _spi_init
(0040) spi_send(0x07ff);
8F EF0F LDI R16,0xFF
90 E017 LDI R17,7
91 DFE9 RCALL _spi_send
(0041) while(1);
FILE: <library>
92 CFFF RJMP 0x0092
93 9508 RET
pop_xgset003C:
94 90A9 LD R10,Y+
95 90B9 LD R11,Y+
96 90C9 LD R12,Y+
97 90D9 LD R13,Y+
98 9508 RET
push_xgsetF0FC:
99 937A ST R23,-Y
9A 936A ST R22,-Y
push_xgset30FC:
9B 935A ST R21,-Y
9C 934A ST R20,-Y
push_xgset00FC:
9D 92FA ST R15,-Y
9E 92EA ST R14,-Y
push_xgset003C:
9F 92DA ST R13,-Y
A0 92CA ST R12,-Y
A1 92BA ST R11,-Y
A2 92AA ST R10,-Y
A3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -