📄 assist~1.lst
字号:
868C 38 41 lsl *__r1
868E 39 40 rol *__r0
8690 B6 41 ldA *__r1
8692 EB 04 add 4,X
8694 B7 41 stA *__r1
8696 B6 40 ldA *__r0
8698 E9 03 adc 3,X
869A B7 40 stA *__r0
869C 55 40 ldHX *__r0
869E AF FE aiX #-2
86A0 E6 01 ldA 1,X
86A2 B7 41 stA *__r1
86A4 F6 ldA 0,X
86A5 95 tSX
86A6 B7 40 stA *__r0
86A8 B6 41 ldA *__r1
86AA 87 pshA
86AB B6 40 ldA *__r0
86AD 87 pshA
86AE 3F 40 clr *__r0
86B0 F6 ldA 0,X
86B1 87 pshA
86B2 B6 40 ldA *__r0
86B4 87 pshA
86B5 CD 8761 jsr _TLV5608Z
86B8 A7 04 aiS #4
86BA 95 tSX
86BB 7C inc 0,X
86BC F6 ldA 0,X
86BD A1 10 cmp #16
86BF 23 C6 bls 0x8687
86C1 A7 01 aiS #1
86C3 81 rts
_TLV5608Init:
fs --> X+0
86C4 A7 FF aiS #-1
86C6 95 tSX
(0035) }
(0036) /*TLV5608芯片D/A转换初始化子程序(TLV5608Init.c)-----------------*
(0037) *功 能:初始化2片TLV5608的CTRL0、CTRL1寄存器 *
(0038) *参 数:无 *
(0039) *返 回:无 *
(0040) *--------------------------------------------------------------*/
(0041) void TLV5608Init(void)
(0042) {
86C7 7F clr 0,X
86C8 CC 8756 jmp 0x8756
(0043) INT8U fs;
(0044) for(fs=0;fs<=1;fs++)
(0045) {
86CB B6 06 ldA 0x06
86CD AA 0C orA #12
86CF B7 06 stA 0x06
(0046) CS_D |=0b00001100; //定义PTC2~3为输出
(0047) CS_P |=0b00001100; //PTC2~3输出为高电平
86D1 B6 02 ldA 0x02
86D3 AA 0C orA #12
86D5 B7 02 stA 0x02
(0048) //设置CTRL0寄存器
(0049) CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
86D7 F6 ldA 0,X
86D8 AB 02 add #2
86DA 6E 0142 mov #1,*__r2
86DD A4 07 and #7
86DF 27 04 beq 0x86E5
86E1 38 42 lsl *__r2
86E3 4B FC dbnzA 0x8727
86E5 4E 4240 mov *__r2,*__r0
86E8 33 40 com *__r0
86EA B6 02 ldA 0x02
86EC B4 40 and *__r0
86EE B7 02 stA 0x02
(0050) //此后在每个SCLK的下降沿传送一位数据,共传输16位数据
(0051) Delay(); //延时20个时钟周期
86F0 CD 8CC4 jsr _Delay
86F3 95 tSX
(0052) SPIDR=0b10000000; //发送高8位数据(CTRL0地址为1000)
86F4 A6 80 ldA #-128
86F6 B7 12 stA 0x12
(0053) while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
86F8 07 11FD BRclr 3,0x11,0x86F8
(0054) //发送完毕
(0055) SPIDR=0b00000000; //发送低8位数据
86FB 3F 12 clr 0x12
(0056) while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
86FD 07 11FD BRclr 3,0x11,0x86FD
(0057) //发送完毕
(0058) asm("nop");
8700 9D nop
(0059) asm("nop");
8701 9D nop
(0060) CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
8702 F6 ldA 0,X
8703 AB 02 add #2
8705 6E 0142 mov #1,*__r2
8708 A4 07 and #7
870A 27 04 beq 0x8710
870C 38 42 lsl *__r2
870E 4B FC dbnzA 0x8752
8710 B6 02 ldA 0x02
8712 BA 42 orA *__r2
8714 B7 02 stA 0x02
(0061)
(0062)
(0063) //设置CTRL1寄存器
(0064) CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
8716 F6 ldA 0,X
8717 AB 02 add #2
8719 6E 0142 mov #1,*__r2
871C A4 07 and #7
871E 27 04 beq 0x8724
8720 38 42 lsl *__r2
8722 4B FC dbnzA 0x8766
8724 4E 4240 mov *__r2,*__r0
8727 33 40 com *__r0
8729 B6 02 ldA 0x02
872B B4 40 and *__r0
872D B7 02 stA 0x02
(0065) //此后在每个SCLK的下降沿传送一位数据
(0066) Delay(); //延时20个时钟周期
872F CD 8CC4 jsr _Delay
8732 95 tSX
(0067) SPIDR=0b10010000; //发送高8位数据(CTRL1地址为1001)
8733 A6 90 ldA #-112
8735 B7 12 stA 0x12
(0068) while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
8737 07 11FD BRclr 3,0x11,0x8737
(0069) //发送完毕
(0070) SPIDR=0b00001111; //发送低8位数据(正常电压,快速)
873A A6 0F ldA #15
873C B7 12 stA 0x12
(0071) while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
873E 07 11FD BRclr 3,0x11,0x873E
(0072) //发送完毕
(0073) CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
8741 F6 ldA 0,X
8742 AB 02 add #2
8744 6E 0142 mov #1,*__r2
8747 A4 07 and #7
8749 27 04 beq 0x874F
874B 38 42 lsl *__r2
874D 4B FC dbnzA 0x8791
874F B6 02 ldA 0x02
8751 BA 42 orA *__r2
8753 B7 02 stA 0x02
(0074) }
8755 7C inc 0,X
8756 F6 ldA 0,X
8757 A1 01 cmp #1
8759 22 03 bhi 0x875E
875B CC 86CB jmp 0x86CB
875E A7 01 aiS #1
8760 81 rts
_TLV5608Z:
value --> X+0
fs --> X+2
buf --> X+7
channel --> X+5
8761 A7 FD aiS #-3
8763 95 tSX
(0075) }
(0076) /*TLV5608芯片D/A转换子程序(TLV5608Z.c)--------------------------*
(0077) *TLV5608的接线: *
(0078) * ① SCLK(3)接MC08HC908GP32的SPSCK(18) *
(0079) * ② DIN(2)接MC08HC908GP32的MISO(17) *
(0080) * ③ LDAC(18)接MC08HC908GP32的PTC4 *
(0081) * ④ 0-1片FS(4作为片选信号)接分别接的PTC2~3 *
(0082) * MODE接高电平,选择uC模式 *
(0083) *入口:channel-通道号(1-16),buf-存放数据 *
(0084) *--------------------------------------------------------------*/
(0085) void TLV5608Z(INT16U channel, INT16U buf)
(0086) {
8764 4F clrA
8765 E7 05 stA 5,X
8767 A6 01 ldA #1
8769 E7 06 stA 6,X
(0087) INT8U fs;//片选号
(0088) INT16U value;
(0089) channel=1;
(0090) if((channel>0)&&(channel<9))
876B E6 05 ldA 5,X
876D 26 04 bne 0x8773
876F E6 06 ldA 6,X
8771 27 14 beq 0x8787
8773 E6 06 ldA 6,X
8775 B7 41 stA *__r1
8777 E6 05 ldA 5,X
8779 B7 40 stA *__r0
877B 55 40 ldHX *__r0
877D 65 0009 cpHX #0x0009
8780 95 tSX
8781 24 04 bcc 0x8787
(0091) fs=0;
8783 6F 02 clr 2,X
8785 20 04 bra 0x878B
(0092) else
(0093) fs=1;
8787 A6 01 ldA #1
8789 E7 02 stA 2,X
(0094) //整合要发送的16位数据-(value的高4位为通道号,后12位为数据位)
(0095) value=((channel-fs*8-1)<<12)|buf;
878B 3F 40 clr *__r0
878D E6 02 ldA 2,X
878F B7 41 stA *__r1
8791 38 41 lsl *__r1
8793 39 40 rol *__r0
8795 38 41 lsl *__r1
8797 39 40 rol *__r0
8799 38 41 lsl *__r1
879B 39 40 rol *__r0
879D E6 06 ldA 6,X
879F B0 41 sub *__r1
87A1 B7 41 stA *__r1
87A3 E6 05 ldA 5,X
87A5 B2 40 sbc *__r0
87A7 B7 40 stA *__r0
87A9 B6 41 ldA *__r1
87AB A0 01 sub #1
87AD B7 41 stA *__r1
87AF B6 40 ldA *__r0
87B1 A2 00 sbc #0
87B3 B7 40 stA *__r0
87B5 A6 0C ldA #12
87B7 38 41 lsl *__r1
87B9 39 40 rol *__r0
87BB 4B FA dbnzA 0x87C6
87BD B6 41 ldA *__r1
87BF EA 08 orA 8,X
87C1 E7 01 stA 1,X
87C3 B6 40 ldA *__r0
87C5 EA 07 orA 7,X
87C7 F7 stA 0,X
(0096) //发送16位数据
(0097) CS_D |=0b00001100; //定义PTC2~3为输出
87C8 B6 06 ldA 0x06
87CA AA 0C orA #12
87CC B7 06 stA 0x06
(0098) CS_P |=0b00001100; //PTC2~3输出为高电平
87CE B6 02 ldA 0x02
87D0 AA 0C orA #12
87D2 B7 02 stA 0x02
(0099)
(0100) //TLV5608.FS=1
(0101) CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
87D4 E6 02 ldA 2,X
87D6 AB 02 add #2
87D8 6E 0142 mov #1,*__r2
87DB A4 07 and #7
87DD 27 04 beq 0x87E3
87DF 38 42 lsl *__r2
87E1 4B FC dbnzA 0x8825
87E3 4E 4240 mov *__r2,*__r0
87E6 33 40 com *__r0
87E8 B6 02 ldA 0x02
87EA B4 40 and *__r0
87EC B7 02 stA 0x02
(0102) //此后在每个SCLK的下降沿传送一位数据
(0103) Delay(); //延时20个时钟周期
87EE CD 8CC4 jsr _Delay
87F1 95 tSX
(0104) SPIDR=value>>8; //发送高8位数据
87F2 F6 ldA 0,X
87F3 B7 12 stA 0x12
(0105) while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
87F5 07 11FD BRclr 3,0x11,0x87F5
(0106) //发送完毕
(0107) SPIDR=value; //发送低8位数据
87F8 E6 01 ldA 1,X
87FA B7 12 stA 0x12
(0108) while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
87FC 07 11FD BRclr 3,0x11,0x87FC
(0109) //发送完毕
(0110) asm("nop");
87FF 9D nop
(0111) CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
8800 E6 02 ldA 2,X
8802 AB 02 add #2
8804 6E 0142 mov #1,*__r2
8807 A4 07 and #7
8809 27 04 beq 0x880F
880B 38 42 lsl *__r2
880D 4B FC dbnzA 0x8851
880F B6 02 ldA 0x02
8811 BA 42 orA *__r2
8813 B7 02 stA 0x02
8815 A7 03 aiS #3
8817 81 rts
FILE: lcd.c
(0001) /*-----------------------------------------------------*
(0002) *文件描述:本文件包含了液晶显示相关子程序,分别为: *
(0003) *(1)Lcdinit:液晶初始化子程序 *
(0004) *(2)LcdShCh:在液晶显示屏上显示字符数据 *
(0005) *(3)LcdShGrRe:在Lcd的指定行上显示或取消矩型边框 *
(0006) *(4)LcdShGrCil:在Lcd上显示或取消空心圆型 *
(0007) *-----------------------------------------------------*/
(0008) //包含头文件
(0009) #include "Includes.h"
(0010) //定义延时子程序
(0011) #define delay1600us DelayTimes(4000) //延时>1.6ms
(0012) #define delay72us DelayTimes(30) //延时>72us
(0013) #define delay40ms DelayTimes(10000) //延时>40ms
(0014) //内部调用函数声明
(0015) void DelayTimes(unsigned int); //延时指定时间
(0016) void Wtite_Command(unsigned char);//将控制命令写入Lcd
(0017) void Wtite_Data(unsigned char); //将数据写入Lcd
(0018) void LcdShGrClr(void); //在Lcd上清图形显示屏
(0019) //在Lcd指定位置上设置线型16个点的显示
(0020) void LcdShGr16P(unsigned char,unsigned char,int);
(0021) //在Lcd指定位置上画1个点
(0022) void LcdShGr1P(unsigned char,unsigned char);
(0023)
(0024) //==================[Lcd初始化操作]==========================
(0025) /*Lcdinit:初始化液晶-----------------------------------*
(0026) *功 能:初始化液晶,设置显示方式,清屏、C自动+1 *
(0027) *参 数:无 *
(0028) *返 回:无 *
(0029) *-----------------------------------------------------*/
(0030) void Lcdinit(void)
(0031) {
_Lcdinit:
8818 B6 07 ldA 0x07
881A AA F0 orA #-16
881C B7 07 stA 0x07
(0032) LCD_CtrlPortDDR |=0xF0; //控制口高四位设置为输出
(0033) LCD_DataPortDDR=0xff; //数据口设置为输出
881E A6 FF ldA #-1
8820 B7 05 stA 0x05
(0034) //[Lcd初始化]
(0035) delay40ms; //延时>40ms
8822 45 2710 ldHX #0x2710
8825 89 pshX
8826 8B pshH
8827 CD 8C67 jsr _DelayTimes
882A A7 02 aiS #2
(0036) Wtite_Command(0b00110000); //8位数据,基本指令
882C A6 30 ldA #48
882E 87 pshA
882F CD 8C31 jsr _Wtite_Command
8832 A7 01 aiS #1
(0037) Wtite_Command(0b00001100); //开显示
8834 A6 0C ldA #12
8836 87 pshA
8837 CD 8C31 jsr _Wtite_Command
883A A7 01 aiS #1
(0038) Wtite_Command(0b0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -