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

📄 cs5532.s

📁 LTC2449 AD转换 LTC2449 AD转换 LTC2449 AD转换
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module cs5532.c
	.area lit(rom, con, rel)
_ADInitData::
	.byte 'A,254
	.byte 0,0
	.byte 0,254
	.byte 0,0
	.byte 0,254
	.byte 0,0
	.byte 0,254
	.byte 0,0
	.byte 0,'E
	.byte 49,192
	.byte 49,192
	.byte 49,192
	.byte 49,192
	.byte 49,192
	.byte 49,192
	.byte 49,192
	.byte 49,192
	.byte 192
	.dbfile E:\mysoft\DH980\cs5532.c
	.dbsym e ADInitData _ADInitData A[35:35]kc
_ADResetData::
	.byte 254,3
	.byte 32,0
	.byte 0,0
	.dbsym e ADResetData _ADResetData A[6:6]kc
	.area text(rom, con, rel)
	.dbfile E:\mysoft\DH980\cs5532.c
	.dbfunc e AD_delay _AD_delay fV
	.even
_AD_delay::
	.dbline -1
	.dbline 24
; #define _CS5532_C
; #include <iom169v.h>
; #include <macros.h>
; #include <stdio.h>
; #include "main.h"
; #include "cs5532.h"
; 
; const unsigned char ADInitData[35]= 
;         {0x41, 
;          0xfe,0x00,0x00,0x00,     //通道0 
;          0xfe,0x00,0x00,0x00,     //通道1 
;          0xfe,0x00,0x00,0x00,     //通道2 
;          0xfe,0x00,0x00,0x00,     //通道3 
;          0x45,                 //设置所有通道设置寄存器 
;          0x31,0xc0,0x31,0xc0,      //0x31:12.5Hz,通道1(1、2脚) 
;          0x31,0xc0,0x31,0xc0,      //0x71,通道2(19、20脚) 
;          0x31,0xc0,0x31,0xc0, 
;          0x31,0xc0,0x31,0xc0, 
;          0xc0};     //执行多路连续转换 
; const unsigned char ADResetData[6]= 
;         {0xfe,0x03,0x20,0x00,0x00,0x00}; //配置寄存器RS位置1,AD复位 
; //cs5532操作IO延时 
; void AD_delay(void) 
; { 
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e AD_write _AD_write fV
;           temp -> R20
;              i -> R22
;           byte -> R22
	.even
_AD_write::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 28
; } 
; //cs5532写寄存器 
; void AD_write(unsigned char byte) 
; { 
	.dbline 30
;         unsigned char i,temp; 
;         temp = byte; 
	mov R20,R22
	.dbline 31
;         for(i=0;i<8;i++) 
	clr R22
	xjmp L6
L3:
	.dbline 32
;         { 
	.dbline 33
;                	if(temp&0x80) 
	sbrs R20,7
	rjmp L7
	.dbline 34
;        					SET_SDI;   //数据送到SPI的SDI口
	sbi 0xe,4
	xjmp L8
L7:
	.dbline 36
;        					else             
;        					CLR_SDI;
	in R24,0xe
	andi R24,239
	out 0xe,R24
L8:
	.dbline 37
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 38
	sbi 0xe,6
	.dbline 39
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 40
	in R24,0xe
	andi R24,191
	out 0xe,R24
	.dbline 41
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 42
	lsl R20
	.dbline 43
L4:
	.dbline 31
	inc R22
L6:
	.dbline 31
	cpi R22,8
	brlo L3
	.dbline 44
;                 delay_loop(2); 
;                 SET_SCK;    //时钟高   
;        					delay_loop(2);
;        					CLR_SCK;    //时钟低
;        					delay_loop(2);
;                 temp<<=1; 
;         } 
;         CLR_SDI;
	in R24,0xe
	andi R24,239
	out 0xe,R24
	.dbline -2
L2:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r i 22 c
	.dbsym r byte 22 c
	.dbend
	.dbfunc e AD_read _AD_read fc
;              i -> R20
;           data -> R22
	.even
_AD_read::
	xcall push_gset2
	.dbline -1
	.dbline 48
; } 
; //cs5532读寄存器 
; unsigned char AD_read(void) 
; { 
	.dbline 49
;         unsigned char i,data=0; 
	clr R22
	.dbline 50
;         CLR_SCK;//sclk=0                 
	in R24,0xe
	andi R24,191
	out 0xe,R24
	.dbline 51
;         delay_loop(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 52
;         for(i=0;i<8;i++) 
	clr R20
	xjmp L13
L10:
	.dbline 53
;         { 
	.dbline 54
;             SET_SCK;    //时钟高   
	sbi 0xe,6
	.dbline 55
;        					delay_loop(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 56
;        					data<<=1;
	lsl R22
	.dbline 57
;            if(SDO)         
	sbis 0xc,5
	rjmp L14
	.dbline 58
;                  data|=0x01; 
	ori R22,1
	xjmp L15
L14:
	.dbline 60
;            else
;            	data &= 0xfe;
	andi R22,254
L15:
	.dbline 61
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 63
	in R24,0xe
	andi R24,191
	out 0xe,R24
	.dbline 64
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 65
L11:
	.dbline 52
	inc R20
L13:
	.dbline 52
	cpi R20,8
	brlo L10
	.dbline 66
;                 delay_loop(2); 
;               
;                 CLR_SCK;    //时钟低
;        					delay_loop(2);
;         } 
;    return(data); 
	mov R16,R22
	.dbline -2
L9:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r data 22 c
	.dbend
	.dbfunc e Init5532 _Init5532 fV
;           data -> R20
;              i -> R22
	.even
_Init5532::
	xcall push_gset2
	.dbline -1
	.dbline 70
; } 
; //初始化cs5532 
; void Init5532(void) 
; { 
	.dbline 71
;         unsigned char i,data=0; 
	clr R20
	.dbline 72
;          SET_CS;
	sbi 0xe,3
	.dbline 73
;    delay_loop(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 74
;    CLR_CS; //片选使能
	in R24,0xe
	andi R24,247
	out 0xe,R24
	.dbline 75
;    delay_loop(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 76
;    CLR_SDI;
	in R24,0xe
	andi R24,239
	out 0xe,R24
	.dbline 77
;    SET_SDO;
	sbi 0xe,5
	.dbline 78
;    CLR_SCK;
	in R24,0xe
	andi R24,191
	out 0xe,R24
	.dbline 79
	clr R22
	xjmp L20
L17:
	.dbline 79
	ldi R16,255
	xcall _AD_write
L18:
	.dbline 79
	inc R22
L20:
	.dbline 79
;         for(i=0;i<15;i++) AD_write(0xff);               //初始化序列
	cpi R22,15
	brlo L17
	.dbline 81
	clr R22
	xjmp L24
L21:
	.dbline 81
	ldi R24,<_ADResetData
	ldi R25,>_ADResetData
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _AD_write
L22:
	.dbline 81
	inc R22
L24:
	.dbline 81
;        // AD_write(0xfe); 
;        for(i=0;i<6;i++)  AD_write(ADResetData[i]);     //复位cs5532 
	cpi R22,6
	brlo L21
	xjmp L26
L25:
	.dbline 83
	.dbline 84
	ldi R16,11
	xcall _AD_write
	.dbline 85
	xcall _AD_read
	mov R20,R16
	.dbline 86
	xcall _AD_read
	.dbline 87
	xcall _AD_read
	.dbline 88
	xcall _AD_read
	.dbline 89
L26:
	.dbline 82
;         while(data!=0x10) //等待AD复位 
	cpi R20,16
	brne L25
	.dbline 90
;         { 
;                 AD_write(0x0b); //读配置寄存器 
;                 data=AD_read(); 
;                 AD_read(); 
;                 AD_read(); 
;                 AD_read(); 
;         } 
;         for(i=0;i<35;i++) 
	clr R22
	xjmp L31
L28:
	.dbline 91
	.dbline 92
	ldi R24,<_ADInitData
	ldi R25,>_ADInitData
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _AD_write
	.dbline 93
L29:
	.dbline 90
	inc R22
L31:
	.dbline 90
	cpi R22,35
	brlo L28
	.dbline -2
L16:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbsym r i 22 c
	.dbend
	.dbfunc e AD_sample _AD_sample fV
;           data -> y+0
	.even
_AD_sample::
	sbiw R28,4
	.dbline -1
	.dbline 97
;         { 
;                 AD_write(ADInitData[i]); 
;         } 
; } 
; //cs5532采样 
; void AD_sample(void) 
; { 
	.dbline 99
;         unsigned char data[4]; 
;         AD_write(0x0c); 
	ldi R16,12
	xcall _AD_write
	.dbline 100
;         data[3]=0;         
	clr R2
	std y+3,R2
	.dbline 101
;         data[2]=AD_read(); 
	xcall _AD_read
	std y+2,R16
	.dbline 102
;         data[1]=AD_read(); 
	xcall _AD_read
	std y+1,R16
	.dbline 103
;         data[0]=AD_read(); 
	xcall _AD_read
	std y+0,R16
	.dbline 104
;         AD_read();//状态字节(溢出位和通道指示),没有用到,丢弃............. 
	xcall _AD_read
	.dbline -2
L32:
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l data 0 A[4:4]c
	.dbend
	.dbfunc e CS5532_Txd _CS5532_Txd fV
;              i -> R20
;            dat -> R22
	.even
_CS5532_Txd::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 107
; } 
; void CS5532_Txd(unsigned char dat)//向CS5532写一字节数据
; {
	.dbline 109
;      unsigned char i;
;      CLR_SCK;//时钟低 
	in R24,0xe
	andi R24,191
	out 0xe,R24
	.dbline 110
;      CLR_CS;
	in R24,0xe
	andi R24,247
	out 0xe,R24
	.dbline 111
;      delay_loop(1);
	ldi R16,1
	ldi R17,0
	xcall _delay_loop
	.dbline 112
;      for(i=0;i<8;i++)
	clr R20
	xjmp L40
L37:
	.dbline 113
;      {
	.dbline 114
;       if((dat<<i)&0x80) 
	mov R16,R22
	mov R17,R20
	xcall lsl8
	mov R24,R16
	andi R24,128
	breq L41
	.dbline 115
;        SET_SDI;   //数据送到SPI的SDI口
	sbi 0xe,4
	xjmp L42
L41:
	.dbline 117
;        else             
;         CLR_SDI;
	in R24,0xe
	andi R24,239
	out 0xe,R24
L42:
	.dbline 118
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 119
	sbi 0xe,6
	.dbline 120
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 121
	in R24,0xe
	andi R24,191
	out 0xe,R24
	.dbline 122
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 123
L38:
	.dbline 112
	inc R20
L40:
	.dbline 112
	cpi R20,8
	brlo L37
	.dbline 124
;         delay_loop(2);
;        SET_SCK;    //时钟高   
;        delay_loop(2);
;        CLR_SCK;    //时钟低
;        delay_loop(2);
;      }
;      CLR_SDI;
	in R24,0xe
	andi R24,239
	out 0xe,R24
	.dbline -2
L36:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r dat 22 c
	.dbend
	.dbfunc e CS5532_RXD _CS5532_RXD fl
;              c -> y+4
;       RxdTxd4b -> y+0
;              i -> R12
;              j -> R10
	.even
_CS5532_RXD::
	xcall push_gset4
	sbiw R28,8
	.dbline -1
	.dbline 127
; }
; unsigned long CS5532_RXD(void)
; {  
	.dbline 131
;     unsigned long  c;
;     unsigned char  RxdTxd4b[4];   
;     unsigned char  i,j;
;     c=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+4,R20
	std z+5,R21
	std z+6,R22
	std z+7,R23
	.dbline 132
;     CLR_SDI;
	in R24,0xe
	andi R24,239
	out 0xe,R24
	.dbline 133
;        for(j=0;j<4;j++)
	clr R10
	xjmp L47
L44:
	.dbline 134
;        {
	.dbline 135
;        	for(i=0;i<8;i++)
	clr R12
	xjmp L51
L48:
	.dbline 136
;          {
	.dbline 137
;          	SET_SCK; //时钟高   
	sbi 0xe,6
	.dbline 138
;          delay_loop(2); 
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 139
;          RxdTxd4b[j]<<=1;      
	movw R24,R28
	mov R2,R10
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R4,z+0
	lsl R4
	std z+0,R4
	.dbline 140
;          if(SDO) 
	sbis 0xc,5
	rjmp L52
	.dbline 141
;          RxdTxd4b[j]|=0x01; //从SDO读取数据
	movw R24,R28
	mov R2,R10
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	ori R24,1
	std z+0,R24
	xjmp L53
L52:
	.dbline 143
;          else
;          RxdTxd4b[j]|=0x00; //从SDO读取数据
	movw R24,R28
	mov R2,R10
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R4,z+0
	std z+0,R4
L53:
	.dbline 144
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 145
	in R24,0xe
	andi R24,191
	out 0xe,R24
	.dbline 146
	ldi R16,2
	ldi R17,0
	xcall _delay_loop
	.dbline 147
L49:
	.dbline 135
	inc R12
L51:
	.dbline 135
	mov R24,R12
	cpi R24,8
	brsh X0
	xjmp L48
X0:
	.dbline 148
L45:
	.dbline 133
	inc R10
L47:
	.dbline 133
	mov R24,R10
	cpi R24,4
	brsh X1
	xjmp L44
X1:
	.dbline 149
;          delay_loop(2);
;          CLR_SCK;             //时钟低 
;          delay_loop(2);
;          }
;        } 
;        c |= RxdTxd4b[0];
	ldd R2,y+0
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+4
	ldd R7,z+5
	ldd R8,z+6
	ldd R9,z+7
	or R6,R2
	or R7,R3
	or R8,R4
	or R9,R5
	movw R30,R28
	std z+4,R6
	std z+5,R7
	std z+6,R8
	std z+7,R9
	.dbline 150
;        c<<=8;
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 151
;        c |= RxdTxd4b[1];
	ldd R2,y+1
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+4
	ldd R7,z+5
	ldd R8,z+6
	ldd R9,z+7
	or R6,R2
	or R7,R3
	or R8,R4
	or R9,R5
	movw R30,R28
	std z+4,R6
	std z+5,R7
	std z+6,R8
	std z+7,R9
	.dbline 152
;        c<<=8;
	ldi R24,8
	ldi R25,0
	movw R30,R28

⌨️ 快捷键说明

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