⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac.lis

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module DAC.c
                        .area text
 0000                   .dbfile DAC.c
 0000                   .dbfunc e DA_SPIInit _DA_SPIInit fV
 0000           _DA_SPIInit::
 0000                   .dbline -1
 0000                   .dbline 19
 0000           ; /*-------------------------------------------------------*
 0000           ; *(1)TLV5608Init:TLV5608初始化
 0000           ; *(2)TLV5608Z:1路DA转换子程序                             *
 0000           ; *(3)DAC:2片TLV5608转换                                   *
 0000           ; *-------------------------------------------------------*/
 0000           ; //[包含头文件]
 0000           ; #include "Includes.h"
 0000           ; //[包含外部函数]
 0000           ; void Delay(void);
 0000           ; /*SPIInit:SPI初始化子程序-------------------------------*
 0000           ; *功 能:对SPI进行初始化,默认为允许SPI,主机工作方式,时钟  *
 0000           ; *      空闲低电平,比特率2分频,                         *
 0000           ; *      波特率为CGMOUT/2*BD(设CGMOUT=2*fBUS=2*2.4576MHz)*
 0000           ; *参 数:无                                               *
 0000           ; *返 回:无                                               *
 0000           ; *------------------------------------------------------*/
 0000           ; #include "Includes.h"
 0000           ; void DA_SPIInit(void)
 0000           ;  {  
 0000                   .dbline 20
 0000           ;       SPCR=0b00100010;   //不产生中断、主机方式、时钟空闲低电平
 0000 A622              lda #34
 0002 B710              sta 0x10
 0004                   .dbline 21
 0004           ;       SPSCR=0b00000000;  //2分频
 0004 3F11              clr 0x11
 0006                   .dbline -2
 0006           L1:
 0006                   .dbline 0 ; func end
 0006 81                rts
 0007                   .dbend
 0007                   .dbfunc e DAC _DAC fV
 0007           ;              i -> 0,X
 0007           ;          value -> 3,X
 0007           _DAC::
 0007                   .dbline -1
 0007 A7FF              ais #-1
 0009 95                tsx
 000A                   .dbline 29
 000A           ;  }
 000A           ; /*D/A转换子程序(DAC.c)-----------------------------------*
 000A           ; *功能:将TLV5608(0)-(1)片,共16通道的数字量转换为模拟量  *
 000A           ; *入口:value--2片5608、16路通道的数字量值                *
 000A           ; *调用:TLV5608Z                                          *
 000A           ; *-------------------------------------------------------*/
 000A           ; void DAC(INT16U *value)
 000A           ; {  
 000A                   .dbline 32
 000A           ;   INT8U i;
 000A           ;   //TLV5608初始化
 000A           ;   TLV5608Init();
 000A CD0050            jsr _TLV5608Init
 000D 95                tsx
 000E                   .dbline 33
 000E           ;   for(i=1;i<=16;i++)
 000E A601              lda #1
 0010 F7                sta ,X
 0011 2035              bra L6
 0013           L3:
 0013                   .dbline 34
 0013 3F00              clr *__r0
 0015 F6                lda ,X
 0016 B700              sta *__r1
 0018 3800              lsl *__r1
 001A 3900              rol *__r0
 001C B600              lda *__r1
 001E EB04              add 4,X
 0020 B700              sta *__r1
 0022 B600              lda *__r0
 0024 E903              adc 3,X
 0026 B700              sta *__r0
 0028 5500              ldhx *__r0
 002A AFFE              aix #-2
 002C E601              lda 1,x
 002E B700              sta *__r1
 0030 F6                lda ,x
 0031 95                tsx
 0032 B700              sta *__r0
 0034 B600              lda *__r1
 0036 87                psha
 0037 B600              lda *__r0
 0039 87                psha
 003A 3F00              clr *__r0
 003C F6                lda ,X
 003D 87                psha
 003E B600              lda *__r0
 0040 87                psha
 0041 CD00ED            jsr _TLV5608Z
 0044 A704              ais #4
 0046 95                tsx
 0047           L4:
 0047                   .dbline 33
 0047 7C                inc ,X
 0048           L6:
 0048                   .dbline 33
 0048 F6                lda ,X
 0049 A110              cmp #16
 004B 23C6              bls L3
 004D                   .dbline -2
 004D           L2:
 004D A701              ais #1
 004F                   .dbline 0 ; func end
 004F 81                rts
 0050                   .dbsym l i 0 c
 0050                   .dbsym l value 3 ps
 0050                   .dbend
 0050                   .dbfunc e TLV5608Init _TLV5608Init fV
 0050           ;             fs -> 0,X
 0050           _TLV5608Init::
 0050                   .dbline -1
 0050 A7FF              ais #-1
 0052 95                tsx
 0053                   .dbline 42
 0053           ;     TLV5608Z(i,*(value+i-1));
 0053           ; }
 0053           ; /*TLV5608芯片D/A转换初始化子程序(TLV5608Init.c)-----------------*
 0053           ; *功  能:初始化2片TLV5608的CTRL0、CTRL1寄存器                    *
 0053           ; *参  数:无                                                      *
 0053           ; *返  回:无                                                      *
 0053           ; *--------------------------------------------------------------*/
 0053           ; void TLV5608Init(void)
 0053           ; {
 0053                   .dbline 44
 0053           ;   INT8U fs;
 0053           ;   for(fs=0;fs<=1;fs++)
 0053 7F                clr ,X
 0054 CC00E2            jmp L11
 0057           L8:
 0057                   .dbline 45
 0057           ;   {
 0057                   .dbline 46
 0057           ;       CS_D |=0b00001100;  //定义PTC2~3为输出
 0057 B606              lda 0x6
 0059 AA0C              ora #12
 005B B706              sta 0x6
 005D                   .dbline 47
 005D           ;       CS_P |=0b00001100;  //PTC2~3输出为高电平
 005D B602              lda 0x2
 005F AA0C              ora #12
 0061 B702              sta 0x2
 0063                   .dbline 49
 0063           ;       //设置CTRL0寄存器       
 0063           ;     CS_P &= ~(1<<(fs+2));   //相应片TLV.FS由高电平变为低电平,产生下降沿
 0063 F6                lda ,X
 0064 AB02              add #2
 0066 6E0100            mov #1,*__r2
 0069 A407              and #7
 006B 2704              beq X1
 006D           X0:
 006D 3800              lsl *__r2
 006F 4BFC              dbnza X0
 0071           X1:
 0071 4E0000            mov *__r2,*__r0
 0074 3300              com *__r0
 0076 B602              lda 0x2
 0078 B400              and *__r0
 007A B702              sta 0x2
 007C                   .dbline 51
 007C           ;                       //此后在每个SCLK的下降沿传送一位数据,共传输16位数据  
 007C           ;     Delay();          //延时20个时钟周期          
 007C CD0000            jsr _Delay
 007F 95                tsx
 0080                   .dbline 52
 0080           ;     SPIDR=0b10000000;       //发送高8位数据(CTRL0地址为1000)  
 0080 A680              lda #-128
 0082 B712              sta 0x12
 0084           L12:
 0084                   .dbline 53
 0084           L13:
 0084                   .dbline 53
 0084           ;       while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
 0084 0711FD            brclr #3,0x11,L12
 0087                   .dbline 55
 0087           ;                                              //发送完毕 
 0087           ;       SPIDR=0b00000000;       //发送低8位数据
 0087 3F12              clr 0x12
 0089           L15:
 0089                   .dbline 56
 0089           L16:
 0089                   .dbline 56
 0089           ;       while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1 
 0089 0711FD            brclr #3,0x11,L15
 008C                   .dbline 58
 008C           ;                                              //发送完毕                                                  
 008C           ;     asm("nop"); 
 008C 9D                nop
 008D                   .dbline 59
 008D           ;     asm("nop");                                              
 008D 9D                nop
 008E                   .dbline 60
 008E           ;       CS_P |= (1<<(fs+2));   //数据传输完毕,相应片TLV.FS由低电平变为高电平  
 008E F6                lda ,X
 008F AB02              add #2
 0091 6E0100            mov #1,*__r2
 0094 A407              and #7
 0096 2704              beq X3
 0098           X2:
 0098 3800              lsl *__r2
 009A 4BFC              dbnza X2
 009C           X3:
 009C B602              lda 0x2
 009E BA00              ora *__r2
 00A0 B702              sta 0x2
 00A2                   .dbline 64
 00A2           ;       
 00A2           ;       
 00A2           ;       //设置CTRL1寄存器       
 00A2           ;       CS_P &= ~(1<<(fs+2));   //相应片TLV.FS由高电平变为低电平,产生下降沿
 00A2 F6                lda ,X
 00A3 AB02              add #2
 00A5 6E0100            mov #1,*__r2
 00A8 A407              and #7
 00AA 2704              beq X5
 00AC           X4:
 00AC 3800              lsl *__r2
 00AE 4BFC              dbnza X4
 00B0           X5:
 00B0 4E0000            mov *__r2,*__r0
 00B3 3300              com *__r0
 00B5 B602              lda 0x2
 00B7 B400              and *__r0
 00B9 B702              sta 0x2
 00BB                   .dbline 66
 00BB           ;                       //此后在每个SCLK的下降沿传送一位数据 
 00BB           ;     Delay();          //延时20个时钟周期        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -