📄 dac.lis
字号:
00BB CD0000 jsr _Delay
00BE 95 tsx
00BF .dbline 67
00BF ; SPIDR=0b10010000; //发送高8位数据(CTRL1地址为1001)
00BF A690 lda #-112
00C1 B712 sta 0x12
00C3 L18:
00C3 .dbline 68
00C3 L19:
00C3 .dbline 68
00C3 ; while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
00C3 0711FD brclr #3,0x11,L18
00C6 .dbline 70
00C6 ; //发送完毕
00C6 ; SPIDR=0b00001111; //发送低8位数据(正常电压,快速)
00C6 A60F lda #15
00C8 B712 sta 0x12
00CA L21:
00CA .dbline 71
00CA L22:
00CA .dbline 71
00CA 0711FD brclr #3,0x11,L21
00CD .dbline 73
00CD F6 lda ,X
00CE AB02 add #2
00D0 6E0100 mov #1,*__r2
00D3 A407 and #7
00D5 2704 beq X7
00D7 X6:
00D7 3800 lsl *__r2
00D9 4BFC dbnza X6
00DB X7:
00DB B602 lda 0x2
00DD BA00 ora *__r2
00DF B702 sta 0x2
00E1 .dbline 74
00E1 L9:
00E1 .dbline 44
00E1 7C inc ,X
00E2 L11:
00E2 .dbline 44
00E2 F6 lda ,X
00E3 A101 cmp #1
00E5 2203 bhi X8
00E7 CC0057 jmp L8
00EA X8:
00EA .dbline -2
00EA L7:
00EA A701 ais #1
00EC .dbline 0 ; func end
00EC 81 rts
00ED .dbsym l fs 0 c
00ED .dbend
00ED .dbfunc e TLV5608Z _TLV5608Z fV
00ED ; value -> 0,X
00ED ; fs -> 2,X
00ED ; buf -> 7,X
00ED ; channel -> 5,X
00ED _TLV5608Z::
00ED .dbline -1
00ED A7FD ais #-3
00EF 95 tsx
00F0 .dbline 86
00F0 ; while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
00F0 ; //发送完毕
00F0 ; CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
00F0 ; }
00F0 ; }
00F0 ; /*TLV5608芯片D/A转换子程序(TLV5608Z.c)--------------------------*
00F0 ; *TLV5608的接线: *
00F0 ; * ① SCLK(3)接MC08HC908GP32的SPSCK(18) *
00F0 ; * ② DIN(2)接MC08HC908GP32的MISO(17) *
00F0 ; * ③ LDAC(18)接MC08HC908GP32的PTC4 *
00F0 ; * ④ 0-1片FS(4作为片选信号)接分别接的PTC2~3 *
00F0 ; * MODE接高电平,选择uC模式 *
00F0 ; *入口:channel-通道号(1-16),buf-存放数据 *
00F0 ; *--------------------------------------------------------------*/
00F0 ; void TLV5608Z(INT16U channel, INT16U buf)
00F0 ; {
00F0 .dbline 89
00F0 ; INT8U fs;//片选号
00F0 ; INT16U value;
00F0 ; channel=1;
00F0 4F clra
00F1 E705 sta 5,X
00F3 A601 lda #1
00F5 E706 sta 6,X
00F7 .dbline 90
00F7 ; if((channel>0)&&(channel<9))
00F7 E605 lda 5,X
00F9 2604 bne X9
00FB E606 lda 6,X
00FD 2714 beq L25
00FF X9:
00FF E606 lda 6,X
0101 B700 sta *__r1
0103 E605 lda 5,X
0105 B700 sta *__r0
0107 5500 ldhx *__r0
0109 650009 cphx #9
010C 95 tsx
010D 2404 bhs L25
010F .dbline 91
010F ; fs=0;
010F 6F02 clr 2,X
0111 2004 bra L26
0113 L25:
0113 .dbline 93
0113 ; else
0113 ; fs=1;
0113 A601 lda #1
0115 E702 sta 2,X
0117 L26:
0117 .dbline 95
0117 ; //整合要发送的16位数据-(value的高4位为通道号,后12位为数据位)
0117 ; value=((channel-fs*8-1)<<12)|buf;
0117 3F00 clr *__r0
0119 E602 lda 2,X
011B B700 sta *__r1
011D 3800 lsl *__r1
011F 3900 rol *__r0
0121 3800 lsl *__r1
0123 3900 rol *__r0
0125 3800 lsl *__r1
0127 3900 rol *__r0
0129 E606 lda 6,X
012B B000 sub *__r1
012D B700 sta *__r1
012F E605 lda 5,X
0131 B200 sbc *__r0
0133 B700 sta *__r0
0135 B600 lda *__r1
0137 A001 sub #1
0139 B700 sta *__r1
013B B600 lda *__r0
013D A200 sbc #0
013F B700 sta *__r0
0141 A60C lda #12
0143 X10:
0143 3800 lsl *__r1
0145 3900 rol *__r0
0147 4BFA dbnza X10
0149 B600 lda *__r1
014B EA08 ora 8,X
014D E701 sta 1,X
014F B600 lda *__r0
0151 EA07 ora 7,X
0153 F7 sta ,X
0154 .dbline 97
0154 ; //发送16位数据
0154 ; CS_D |=0b00001100; //定义PTC2~3为输出
0154 B606 lda 0x6
0156 AA0C ora #12
0158 B706 sta 0x6
015A .dbline 98
015A ; CS_P |=0b00001100; //PTC2~3输出为高电平
015A B602 lda 0x2
015C AA0C ora #12
015E B702 sta 0x2
0160 .dbline 101
0160 ;
0160 ; //TLV5608.FS=1
0160 ; CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
0160 E602 lda 2,X
0162 AB02 add #2
0164 6E0100 mov #1,*__r2
0167 A407 and #7
0169 2704 beq X12
016B X11:
016B 3800 lsl *__r2
016D 4BFC dbnza X11
016F X12:
016F 4E0000 mov *__r2,*__r0
0172 3300 com *__r0
0174 B602 lda 0x2
0176 B400 and *__r0
0178 B702 sta 0x2
017A .dbline 103
017A ; //此后在每个SCLK的下降沿传送一位数据
017A ; Delay(); //延时20个时钟周期
017A CD0000 jsr _Delay
017D 95 tsx
017E .dbline 104
017E ; SPIDR=value>>8; //发送高8位数据
017E F6 lda ,X
017F B712 sta 0x12
0181 L27:
0181 .dbline 105
0181 L28:
0181 .dbline 105
0181 ; while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
0181 0711FD brclr #3,0x11,L27
0184 .dbline 107
0184 ; //发送完毕
0184 ; SPIDR=value; //发送低8位数据
0184 E601 lda 1,X
0186 B712 sta 0x12
0188 L30:
0188 .dbline 108
0188 L31:
0188 .dbline 108
0188 ; while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
0188 0711FD brclr #3,0x11,L30
018B .dbline 110
018B ; //发送完毕
018B ; asm("nop");
018B 9D nop
018C .dbline 111
018C ; CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
018C E602 lda 2,X
018E AB02 add #2
0190 6E0100 mov #1,*__r2
0193 A407 and #7
0195 2704 beq X14
0197 X13:
0197 3800 lsl *__r2
0199 4BFC dbnza X13
019B X14:
019B B602 lda 0x2
019D BA00 ora *__r2
019F B702 sta 0x2
01A1 .dbline -2
01A1 L24:
01A1 A703 ais #3
01A3 .dbline 0 ; func end
01A3 81 rts
01A4 .dbsym l value 0 s
01A4 .dbsym l fs 2 c
01A4 .dbsym l buf 7 s
01A4 .dbsym l channel 5 s
01A4 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -