📄 cs5532.lis
字号:
.module cs5532.c
.area lit(rom, con, rel)
0000 _ADInitData::
0000 41FE .byte 'A,254
0002 0000 .byte 0,0
0004 00FE .byte 0,254
0006 0000 .byte 0,0
0008 00FE .byte 0,254
000A 0000 .byte 0,0
000C 00FE .byte 0,254
000E 0000 .byte 0,0
0010 0045 .byte 0,'E
0012 31C0 .byte 49,192
0014 31C0 .byte 49,192
0016 31C0 .byte 49,192
0018 31C0 .byte 49,192
001A 31C0 .byte 49,192
001C 31C0 .byte 49,192
001E 31C0 .byte 49,192
0020 31C0 .byte 49,192
0022 C0 .byte 192
0023 .dbfile E:\mysoft\DH980\cs5532.c
0023 .dbsym e ADInitData _ADInitData A[35:35]kc
0023 _ADResetData::
0023 FE03 .byte 254,3
0025 2000 .byte 32,0
0027 0000 .byte 0,0
0029 .dbsym e ADResetData _ADResetData A[6:6]kc
.area text(rom, con, rel)
0000 .dbfile E:\mysoft\DH980\cs5532.c
0000 .dbfunc e AD_delay _AD_delay fV
.even
0000 _AD_delay::
0000 .dbline -1
0000 .dbline 24
0000 ; #define _CS5532_C
0000 ; #include <iom169v.h>
0000 ; #include <macros.h>
0000 ; #include <stdio.h>
0000 ; #include "main.h"
0000 ; #include "cs5532.h"
0000 ;
0000 ; const unsigned char ADInitData[35]=
0000 ; {0x41,
0000 ; 0xfe,0x00,0x00,0x00, //通道0
0000 ; 0xfe,0x00,0x00,0x00, //通道1
0000 ; 0xfe,0x00,0x00,0x00, //通道2
0000 ; 0xfe,0x00,0x00,0x00, //通道3
0000 ; 0x45, //设置所有通道设置寄存器
0000 ; 0x31,0xc0,0x31,0xc0, //0x31:12.5Hz,通道1(1、2脚)
0000 ; 0x31,0xc0,0x31,0xc0, //0x71,通道2(19、20脚)
0000 ; 0x31,0xc0,0x31,0xc0,
0000 ; 0x31,0xc0,0x31,0xc0,
0000 ; 0xc0}; //执行多路连续转换
0000 ; const unsigned char ADResetData[6]=
0000 ; {0xfe,0x03,0x20,0x00,0x00,0x00}; //配置寄存器RS位置1,AD复位
0000 ; //cs5532操作IO延时
0000 ; void AD_delay(void)
0000 ; {
0000 .dbline -2
0000 L1:
0000 .dbline 0 ; func end
0000 0895 ret
0002 .dbend
0002 .dbfunc e AD_write _AD_write fV
0002 ; temp -> R20
0002 ; i -> R22
0002 ; byte -> R22
.even
0002 _AD_write::
0002 0E940000 xcall push_gset2
0006 602F mov R22,R16
0008 .dbline -1
0008 .dbline 28
0008 ; }
0008 ; //cs5532写寄存器
0008 ; void AD_write(unsigned char byte)
0008 ; {
0008 .dbline 30
0008 ; unsigned char i,temp;
0008 ; temp = byte;
0008 462F mov R20,R22
000A .dbline 31
000A ; for(i=0;i<8;i++)
000A 6627 clr R22
000C 19C0 xjmp L6
000E L3:
000E .dbline 32
000E ; {
000E .dbline 33
000E ; if(temp&0x80)
000E 47FF sbrs R20,7
0010 02C0 rjmp L7
0012 .dbline 34
0012 ; SET_SDI; //数据送到SPI的SDI口
0012 749A sbi 0xe,4
0014 03C0 xjmp L8
0016 L7:
0016 .dbline 36
0016 ; else
0016 ; CLR_SDI;
0016 8EB1 in R24,0xe
0018 8F7E andi R24,239
001A 8EB9 out 0xe,R24
001C L8:
001C .dbline 37
001C 02E0 ldi R16,2
001E 10E0 ldi R17,0
0020 0E940000 xcall _delay_loop
0024 .dbline 38
0024 769A sbi 0xe,6
0026 .dbline 39
0026 02E0 ldi R16,2
0028 10E0 ldi R17,0
002A 0E940000 xcall _delay_loop
002E .dbline 40
002E 8EB1 in R24,0xe
0030 8F7B andi R24,191
0032 8EB9 out 0xe,R24
0034 .dbline 41
0034 02E0 ldi R16,2
0036 10E0 ldi R17,0
0038 0E940000 xcall _delay_loop
003C .dbline 42
003C 440F lsl R20
003E .dbline 43
003E L4:
003E .dbline 31
003E 6395 inc R22
0040 L6:
0040 .dbline 31
0040 6830 cpi R22,8
0042 28F3 brlo L3
0044 .dbline 44
0044 ; delay_loop(2);
0044 ; SET_SCK; //时钟高
0044 ; delay_loop(2);
0044 ; CLR_SCK; //时钟低
0044 ; delay_loop(2);
0044 ; temp<<=1;
0044 ; }
0044 ; CLR_SDI;
0044 8EB1 in R24,0xe
0046 8F7E andi R24,239
0048 8EB9 out 0xe,R24
004A .dbline -2
004A L2:
004A 0E940000 xcall pop_gset2
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbsym r temp 20 c
0050 .dbsym r i 22 c
0050 .dbsym r byte 22 c
0050 .dbend
0050 .dbfunc e AD_read _AD_read fc
0050 ; i -> R20
0050 ; data -> R22
.even
0050 _AD_read::
0050 0E940000 xcall push_gset2
0054 .dbline -1
0054 .dbline 48
0054 ; }
0054 ; //cs5532读寄存器
0054 ; unsigned char AD_read(void)
0054 ; {
0054 .dbline 49
0054 ; unsigned char i,data=0;
0054 6627 clr R22
0056 .dbline 50
0056 ; CLR_SCK;//sclk=0
0056 8EB1 in R24,0xe
0058 8F7B andi R24,191
005A 8EB9 out 0xe,R24
005C .dbline 51
005C ; delay_loop(2);
005C 02E0 ldi R16,2
005E 10E0 ldi R17,0
0060 0E940000 xcall _delay_loop
0064 .dbline 52
0064 ; for(i=0;i<8;i++)
0064 4427 clr R20
0066 17C0 xjmp L13
0068 L10:
0068 .dbline 53
0068 ; {
0068 .dbline 54
0068 ; SET_SCK; //时钟高
0068 769A sbi 0xe,6
006A .dbline 55
006A ; delay_loop(2);
006A 02E0 ldi R16,2
006C 10E0 ldi R17,0
006E 0E940000 xcall _delay_loop
0072 .dbline 56
0072 ; data<<=1;
0072 660F lsl R22
0074 .dbline 57
0074 ; if(SDO)
0074 659B sbis 0xc,5
0076 02C0 rjmp L14
0078 .dbline 58
0078 ; data|=0x01;
0078 6160 ori R22,1
007A 01C0 xjmp L15
007C L14:
007C .dbline 60
007C ; else
007C ; data &= 0xfe;
007C 6E7F andi R22,254
007E L15:
007E .dbline 61
007E 02E0 ldi R16,2
0080 10E0 ldi R17,0
0082 0E940000 xcall _delay_loop
0086 .dbline 63
0086 8EB1 in R24,0xe
0088 8F7B andi R24,191
008A 8EB9 out 0xe,R24
008C .dbline 64
008C 02E0 ldi R16,2
008E 10E0 ldi R17,0
0090 0E940000 xcall _delay_loop
0094 .dbline 65
0094 L11:
0094 .dbline 52
0094 4395 inc R20
0096 L13:
0096 .dbline 52
0096 4830 cpi R20,8
0098 38F3 brlo L10
009A .dbline 66
009A ; delay_loop(2);
009A ;
009A ; CLR_SCK; //时钟低
009A ; delay_loop(2);
009A ; }
009A ; return(data);
009A 062F mov R16,R22
009C .dbline -2
009C L9:
009C 0E940000 xcall pop_gset2
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym r i 20 c
00A2 .dbsym r data 22 c
00A2 .dbend
00A2 .dbfunc e Init5532 _Init5532 fV
00A2 ; data -> R20
00A2 ; i -> R22
.even
00A2 _Init5532::
00A2 0E940000 xcall push_gset2
00A6 .dbline -1
00A6 .dbline 70
00A6 ; }
00A6 ; //初始化cs5532
00A6 ; void Init5532(void)
00A6 ; {
00A6 .dbline 71
00A6 ; unsigned char i,data=0;
00A6 4427 clr R20
00A8 .dbline 72
00A8 ; SET_CS;
00A8 739A sbi 0xe,3
00AA .dbline 73
00AA ; delay_loop(2);
00AA 02E0 ldi R16,2
00AC 10E0 ldi R17,0
00AE 0E940000 xcall _delay_loop
00B2 .dbline 74
00B2 ; CLR_CS; //片选使能
00B2 8EB1 in R24,0xe
00B4 877F andi R24,247
00B6 8EB9 out 0xe,R24
00B8 .dbline 75
00B8 ; delay_loop(2);
00B8 02E0 ldi R16,2
00BA 10E0 ldi R17,0
00BC 0E940000 xcall _delay_loop
00C0 .dbline 76
00C0 ; CLR_SDI;
00C0 8EB1 in R24,0xe
00C2 8F7E andi R24,239
00C4 8EB9 out 0xe,R24
00C6 .dbline 77
00C6 ; SET_SDO;
00C6 759A sbi 0xe,5
00C8 .dbline 78
00C8 ; CLR_SCK;
00C8 8EB1 in R24,0xe
00CA 8F7B andi R24,191
00CC 8EB9 out 0xe,R24
00CE .dbline 79
00CE 6627 clr R22
00D0 03C0 xjmp L20
00D2 L17:
00D2 .dbline 79
00D2 0FEF ldi R16,255
00D4 96DF xcall _AD_write
00D6 L18:
00D6 .dbline 79
00D6 6395 inc R22
00D8 L20:
00D8 .dbline 79
00D8 ; for(i=0;i<15;i++) AD_write(0xff); //初始化序列
00D8 6F30 cpi R22,15
00DA D8F3 brlo L17
00DC .dbline 81
00DC 6627 clr R22
00DE 09C0 xjmp L24
00E0 L21:
00E0 .dbline 81
00E0 80E0 ldi R24,<_ADResetData
00E2 90E0 ldi R25,>_ADResetData
00E4 E62F mov R30,R22
00E6 FF27 clr R31
00E8 E80F add R30,R24
00EA F91F adc R31,R25
00EC 0491 lpm R16,Z
00EE 89DF xcall _AD_write
00F0 L22:
00F0 .dbline 81
00F0 6395 inc R22
00F2 L24:
00F2 .dbline 81
00F2 ; // AD_write(0xfe);
00F2 ; for(i=0;i<6;i++) AD_write(ADResetData[i]); //复位cs5532
00F2 6630 cpi R22,6
00F4 A8F3 brlo L21
00F6 07C0 xjmp L26
00F8 L25:
00F8 .dbline 83
00F8 .dbline 84
00F8 0BE0 ldi R16,11
00FA 83DF xcall _AD_write
00FC .dbline 85
00FC A9DF xcall _AD_read
00FE 402F mov R20,R16
0100 .dbline 86
0100 A7DF xcall _AD_read
0102 .dbline 87
0102 A6DF xcall _AD_read
0104 .dbline 88
0104 A5DF xcall _AD_read
0106 .dbline 89
0106 L26:
0106 .dbline 82
0106 ; while(data!=0x10) //等待AD复位
0106 4031 cpi R20,16
0108 B9F7 brne L25
010A .dbline 90
010A ; {
010A ; AD_write(0x0b); //读配置寄存器
010A ; data=AD_read();
010A ; AD_read();
010A ; AD_read();
010A ; AD_read();
010A ; }
010A ; for(i=0;i<35;i++)
010A 6627 clr R22
010C 09C0 xjmp L31
010E L28:
010E .dbline 91
010E .dbline 92
010E 80E0 ldi R24,<_ADInitData
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -