📄 发射.s
字号:
.module _发射.c
.area text(rom, con, rel)
.dbfile F:\915M\发射\发射.c
.area vector(rom, abs)
.org 18
rjmp _TIM0_ovf
.area text(rom, con, rel)
.dbfile F:\915M\发射\发射.c
.area data(ram, con, rel)
.dbfile F:\915M\发射\发射.c
_n::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile F:\915M\发射\发射.c
.dbsym e n _n i
.area text(rom, con, rel)
.dbfile F:\915M\发射\发射.c
.dbfunc e Delay_ms _Delay_ms fV
; i -> R10
; p -> R20
; amS -> R16
.even
_Delay_ms::
st -y,R10
st -y,R20
.dbline -1
.dbline 61
; #include <iom8v.h>
; #include <macros.h>
; #include <stdio.h>
;
; #define DDR_IN 0
; #define DDR_OUT 1
;
; #define PORT_SEL PORTB
; #define PIN_SEL PINB
; #define DDR_SEL DDRB
;
; #define PORT_SDI PORTB
; #define PIN_SDI PINB
; #define DDR_SDI DDRB
;
; #define PORT_SCK PORTB
; #define PIN_SCK PINB
; #define DDR_SCK DDRB
;
; #define PORT_SDO PORTB
; #define PIN_SDO PINB
; #define DDR_SDO DDRB
;
; #define PB7 7
; #define PB6 6
; #define RFXX_SCK 5
; #define RFXX_SDO 4
; #define RFXX_SDI 3
; #define RFXX_SEL 2
; #define RFXX_DATA 1
; #define PB0 0
;
; #define SEL_OUTPUT() DDR_SEL|=(1<<RFXX_SEL)
; #define HI_SEL() PORT_SEL|=(1<<RFXX_SEL)
; #define LOW_SEL() PORT_SEL&=~(1<<RFXX_SEL)
;
; #define SDI_OUTPUT() DDR_SDI|=(1<<RFXX_SDI)
; #define HI_SDI() PORT_SDI|=(1<<RFXX_SDI)
; #define LOW_SDI() PORT_SDI&=~(1<<RFXX_SDI)
;
; #define SDO_INPUT() DDR_SDO&=~(1<<RFXX_SDO)
; #define SDO_HI() PIN_SDO&=(1<<RFXX_SDO)
; #define SCK_OUTPUT() DDR_SCK|=(1<<RFXX_SCK)
; #define HI_SCK() PORT_SCK|=(1<<RFXX_SCK)
; #define LOW_SCK() PORT_SCK&=~(1<<RFXX_SCK)
;
; #pragma interrupt_handler TIM0_ovf:10
;
; #define baud 19200
; #define fosc 8000000
;
; #define uchar unsigned char
; #define uint unsigned int
;
; uint n=0;
; uchar ch0,ch1,ch2,ch3; //j,k,l,m;
; uchar adc_mux; //AD通道
;
; /*延时*/
; void Delay_ms(unsigned char amS)
; {
.dbline 63
; uchar i,p;
; for(i=0;i<amS;i++)
clr R10
rjmp L5
L2:
.dbline 64
; for(p=0;p<200;p++)
clr R20
rjmp L9
L6:
.dbline 65
; ;
L7:
.dbline 64
inc R20
L9:
.dbline 64
cpi R20,200
brlo L6
X0:
L3:
.dbline 63
inc R10
L5:
.dbline 63
cp R10,R16
brlo L2
X1:
.dbline -2
L1:
.dbline 0 ; func end
ld R20,y+
ld R10,y+
ret
.dbsym r i 10 c
.dbsym r p 20 c
.dbsym r amS 16 c
.dbend
.dbfunc e get_ad _get_ad fc
; ad_value -> R16
.even
_get_ad::
.dbline -1
.dbline 70
; }
;
; /*获取AD值*/
; uchar get_ad(void)
; {
L11:
.dbline 72
; uchar ad_value;
; while(!(ADCSRA & (1 << ADIF))); //等待
L12:
.dbline 72
sbis 0x6,4
rjmp L11
X2:
.dbline 73
; ad_value = ADCH;
in R16,0x5
.dbline 74
; ADCSRA &= ~(1 << ADIF); //清标志
cbi 0x6,4
.dbline 75
; return ad_value;
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r ad_value 16 c
.dbend
.dbfunc e start_AD _start_AD fV
.even
_start_AD::
st -y,R10
.dbline -1
.dbline 80
; }
;
; /*AD变换开始*/
; void start_AD(void)
; {
.dbline 81
; adc_mux=0; //AD通道0
clr R2
sts _adc_mux,R2
.dbline 82
; ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f); //取VCC为参考值,AD0模拟变量输入
mov R24,R2
andi R24,15
ori R24,96
out 0x7,R24
.dbline 83
; ADCSRA|=0xC0; //AD转换启动
in R24,0x6
ori R24,192
out 0x6,R24
.dbline 84
; ch0=get_ad();
rcall _get_ad
sts _ch0,R16
.dbline 86
;
; adc_mux=1; //AD通道1
ldi R24,1
sts _adc_mux,R24
.dbline 87
; ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
andi R24,15
ori R24,96
out 0x7,R24
.dbline 88
; ADCSRA|=0xC0; //AD转换启动
in R24,0x6
ori R24,192
out 0x6,R24
.dbline 89
; ch1=get_ad();
rcall _get_ad
sts _ch1,R16
.dbline 91
;
; adc_mux=2; //AD通道2
ldi R24,2
sts _adc_mux,R24
.dbline 92
; ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
andi R24,15
ori R24,96
out 0x7,R24
.dbline 93
; ADCSRA|=0xC0; //AD转换启动
in R24,0x6
ori R24,192
out 0x6,R24
.dbline 94
; ch2=get_ad();
rcall _get_ad
mov R10,R16
sts _ch2,R10
.dbline 96
;
; adc_mux=3; //AD通道3
ldi R24,3
sts _adc_mux,R24
.dbline 97
; ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
andi R24,15
ori R24,96
out 0x7,R24
.dbline 98
; ADCSRA|=0xC0; //AD转换启动
in R24,0x6
ori R24,192
out 0x6,R24
.dbline 99
; ch3=get_ad();
rcall _get_ad
mov R10,R16
sts _ch3,R10
.dbline -2
L14:
.dbline 0 ; func end
ld R10,y+
ret
.dbend
.dbfunc e RFXX_WRT_CMD _RFXX_WRT_CMD fV
; temp -> R20,R21
; i -> R22
; aCmd -> R16,R17
.even
_RFXX_WRT_CMD::
rcall push_xgsetF000
.dbline -1
.dbline 104
; }
;
; /*发射数据写入*/
; void RFXX_WRT_CMD(uint aCmd)
; {
.dbline 107
; uchar i;
; uint temp;
; LOW_SCK();
cbi 0x18,5
.dbline 108
; LOW_SEL();
cbi 0x18,2
.dbline 109
; for(i=0;i<16;i++)
clr R22
rjmp L19
L16:
.dbline 110
; {
.dbline 111
; temp<<=1;
lsl R20
rol R21
.dbline 112
; if(SDO_HI())
in R24,0x16
andi R24,16
out 0x16,R24
tst R24
breq L20
X3:
.dbline 113
; { temp|=0x0001; }
.dbline 113
ori R20,1
.dbline 113
L20:
.dbline 114
; LOW_SCK();
cbi 0x18,5
.dbline 115
; if(aCmd&0x8000) HI_SDI();
sbrs R17,7
rjmp L22
X4:
.dbline 115
sbi 0x18,3
rjmp L23
L22:
.dbline 116
; else LOW_SDI();
cbi 0x18,3
L23:
.dbline 117
; HI_SCK();
sbi 0x18,5
.dbline 118
; aCmd<<=1;
lsl R16
rol R17
.dbline 119
; }
L17:
.dbline 109
inc R22
L19:
.dbline 109
cpi R22,16
brlo L16
X5:
.dbline 120
; LOW_SCK();
cbi 0x18,5
.dbline 121
; HI_SEL();
sbi 0x18,2
.dbline -2
L15:
.dbline 0 ; func end
rjmp pop_xgsetF000
.dbsym r temp 20 i
.dbsym r i 22 c
.dbsym r aCmd 16 i
.dbend
.dbfunc e RF02_SEND _RF02_SEND fV
; i -> R20
; aByte -> R16
.even
_RF02_SEND::
st -y,R20
.dbline -1
.dbline 126
; }
;
; /*发射数据*/
; void RF02_SEND(uchar aByte)
; {
.dbline 128
; uchar i;
; for(i=0;i<8;i++)
clr R20
rjmp L28
L29:
.dbline 130
; {
; while(PINB&(1<<RFXX_SDO));
L30:
.dbline 130
sbic 0x16,4
rjmp L29
X6:
L32:
.dbline 131
; while(!(PINB&(1<<RFXX_SDO)));
L33:
.dbline 131
sbis 0x16,4
rjmp L32
X7:
.dbline 132
; if(aByte&0x80) PORTB|=(1<<RFXX_DATA);
sbrs R16,7
rjmp L35
X8:
.dbline 132
sbi 0x18,1
rjmp L36
L35:
.dbline 133
; else PORTB&=~(1<<RFXX_DATA);
cbi 0x18,1
L36:
.dbline 134
; aByte<<=1;
lsl R16
.dbline 135
; }
L26:
.dbline 128
inc R20
L28:
.dbline 128
cpi R20,8
brlo L30
X9:
.dbline -2
L24:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r i 20 c
.dbsym r aByte 16 c
.dbend
.dbfunc e Transmit _Transmit fV
; Send_Data -> R16
.even
_Transmit::
.dbline -1
.dbline 140
; }
;
; /*字符输出函数*/
; void Transmit(uchar Send_Data)
; {
L38:
.dbline 141
; while (!(UCSRA & (1<<UDRE)));//判断是否发送完成
L39:
.dbline 141
sbis 0xb,5
rjmp L38
X10:
.dbline 142
; UDR=Send_Data;//发送数据
out 0xc,R16
.dbline -2
L37:
.dbline 0 ; func end
ret
.dbsym r Send_Data 16 c
.dbend
.dbfunc e TIM0_init _TIM0_init fV
.even
_TIM0_init::
.dbline -1
.dbline 147
; }
;
; /*T0初始化*/
; void TIM0_init(void)
; {
.dbline 148
; _CLI();//关全局中断
cli
.dbline 149
; TCCR0=0x00;
clr R2
out 0x33,R2
.dbline 150
; TCNT0=0xE0; //4us定时
ldi R24,224
out 0x32,R24
.dbline 151
; TCCR0|=0x01;//开定时器,无预分频
in R24,0x33
ori R24,1
out 0x33,R24
.dbline 152
; TIMSK|=0x01;//T0中断
in R24,0x39
ori R24,1
out 0x39,R24
.dbline 153
; SREG|=0x80;//开全局中断
bset 7
.dbline -2
L41:
.dbline 0 ; func end
ret
.dbend
.dbfunc e TIM0_ovf _TIM0_ovf fV
.even
_TIM0_ovf::
st -y,R0
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
st -y,R31
in R0,0x3f
st -y,R0
.dbline -1
.dbline 158
; }
;
; /*T020ms中断程序*/
; void TIM0_ovf(void)
; {
.dbline 159
; TCCR0=0x00;//关定时器
clr R2
out 0x33,R2
.dbline 160
; TCNT0=0xE0;
ldi R24,224
out 0x32,R24
.dbline 161
; if(++n==5000)
lds R24,_n
lds R25,_n+1
adiw R24,1
movw R2,R24
sts _n+1,R3
sts _n,R2
cpi R24,136
ldi R30,19
cpc R25,R30
breq X12
rjmp L43
X12:
X11:
.dbline 162
; {
.dbline 163
; n=0;
clr R2
clr R3
sts _n+1,R3
sts _n,R2
.dbline 164
; RFXX_WRT_CMD(0xC039);//启动发射
ldi R16,49209
ldi R17,192
rcall _RFXX_WRT_CMD
.dbline 166
;
; RF02_SEND(0xAA);//PREAMBLE
ldi R16,170
rcall _RF02_SEND
.dbline 167
; RF02_SEND(0xAA);//PREAMBLE
ldi R16,170
rcall _RF02_SEND
.dbline 168
; RF02_SEND(0xAA);//PREAMBLE
ldi R16,170
rcall _RF02_SEND
.dbline 169
; RF02_SEND(0x2D);//SYNC HI BYTE
ldi R16,45
rcall _RF02_SEND
.dbline 170
; RF02_SEND(0xD4);//SYNC LOW BYTE
ldi R16,212
rcall _RF02_SEND
.dbline 172
;
; RF02_SEND(ch0);//DATA BYTE 0
lds R16,_ch0
rcall _RF02_SEND
.dbline 173
; RF02_SEND(ch1);//DATA BYTE 1
lds R16,_ch1
rcall _RF02_SEND
.dbline 174
; RF02_SEND(ch2);//DATA BYTE 2
lds R16,_ch2
rcall _RF02_SEND
.dbline 175
; RF02_SEND(ch3);//DATA BYTE 3
lds R16,_ch3
rcall _RF02_SEND
.dbline 177
;
; RF02_SEND(0xAA);//Dummpy byte
ldi R16,170
rcall _RF02_SEND
.dbline 179
;
; RFXX_WRT_CMD(0xC001);
ldi R16,49153
ldi R17,192
rcall _RFXX_WRT_CMD
.dbline 181
;
; Transmit(ch0);
lds R16,_ch0
rcall _Transmit
.dbline 182
; Transmit(ch1);
lds R16,_ch1
rcall _Transmit
.dbline 183
; Transmit(ch2);
lds R16,_ch2
rcall _Transmit
.dbline 184
; Transmit(ch3);
lds R16,_ch3
rcall _Transmit
.dbline 186
;
; start_AD();
rcall _start_AD
.dbline 187
; }
L43:
.dbline 188
; TCCR0|=0x01;//开定时器
in R24,0x33
ori R24,1
out 0x33,R24
.dbline -2
L42:
.dbline 0 ; func end
ld R0,y+
out 0x3f,R0
ld R31,y+
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
ld R0,y+
reti
.dbend
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 193
; }
;
; /*USART初始化*/
; void uart_init(void)
; {
.dbline 194
; UCSRA=0x00;
clr R2
out 0xb,R2
.dbline 195
; UCSRB=(1<<RXEN)|(1<<TXEN); // 允许发送和接收
ldi R24,24
out 0xa,R24
.dbline 196
; UCSRC=(1<<URSEL)|0x06; // 8bit,1stop
ldi R24,134
out 0x20,R24
.dbline 197
; UBRRL=(fosc/baud/16-1)%256; // 设置波特率寄存器低位字节
ldi R24,25
out 0x9,R24
.dbline 198
; UBRRH=(fosc/baud/16-1)/256; // 设置波特率寄存器高位字节
out 0x20,R2
.dbline -2
L45:
.dbline 0 ; func end
ret
.dbend
.dbfunc e adc_init _adc_init fV
.even
_adc_init::
.dbline -1
.dbline 203
; }
;
; /*AD变换初始化*/
; void adc_init(void)
; {
.dbline 204
; DDRC=0x00;//PORTC INPUT
clr R2
out 0x14,R2
.dbline 205
; adc_mux=0;
sts _adc_mux,R2
.dbline 206
; ADCSRA=0x00; //关ad
out 0x6,R2
.dbline 207
; ACSR = (1<<ACD); //关模拟比较器
ldi R24,128
out 0x8,R24
.dbline 208
; ADCSRA|=0x06; //预分频1
in R24,0x6
ori R24,6
out 0x6,R24
.dbline 210
;
; ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f); //取VCC为参考值,AD0模拟变量输入
mov R24,R2
andi R24,15
ori R24,96
out 0x7,R24
.dbline 211
; ADCSRA|=0xC0; //AD转换启动
in R24,0x6
ori R24,192
out 0x6,R24
.dbline 212
; ch0=get_ad();
rcall _get_ad
sts _ch0,R16
.dbline -2
L46:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_main _init_main fV
.even
_init_main::
.dbline -1
.dbline 217
; }
;
; /*系统初始化*/
; void init_main(void)
; {
.dbline 218
; uart_init();
rcall _uart_init
.dbline 219
; adc_init();
rcall _adc_init
.dbline 220
; start_AD();
rcall _start_AD
.dbline 222
;
; MCUCR=0x00;
clr R2
out 0x35,R2
.dbline 223
; GICR=0x00;
out 0x3b,R2
.dbline -2
L47:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RFXX_PORT_INIT _RFXX_PORT_INIT fV
.even
_RFXX_PORT_INIT::
.dbline -1
.dbline 228
; }
;
; /*发射芯片端口初始化*/
; void RFXX_PORT_INIT(void)
; {
.dbline 229
; HI_SEL();
sbi 0x18,2
.dbline 230
; HI_SDI();
sbi 0x18,3
.dbline 231
; LOW_SCK();
cbi 0x18,5
.dbline 232
; SEL_OUTPUT();
sbi 0x17,2
.dbline 233
; SDI_OUTPUT();
sbi 0x17,3
.dbline 234
; SDO_INPUT();
cbi 0x17,4
.dbline 235
; SCK_OUTPUT();
sbi 0x17,5
.dbline -2
L48:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 240
; }
;
; /*主程序*/
; void main(void)
; {
.dbline 241
; init_main();
rcall _init_main
.dbline 242
; RFXX_PORT_INIT();
rcall _RFXX_PORT_INIT
.dbline 244
;
; RFXX_WRT_CMD(0xCC00); //执行状态寄存器命令
ldi R16,52224
ldi R17,204
rcall _RFXX_WRT_CMD
.dbline 245
; RFXX_WRT_CMD(0x9B61); //915频段
ldi R16,39777
ldi R17,155
rcall _RFXX_WRT_CMD
.dbline 246
; RFXX_WRT_CMD(0xA7D0); //A640=434MHz
ldi R16,42960
ldi R17,167
rcall _RFXX_WRT_CMD
.dbline 247
; RFXX_WRT_CMD(0xD040); //RATE/2
ldi R16,53312
ldi R17,208
rcall _RFXX_WRT_CMD
.dbline 248
; RFXX_WRT_CMD(0xC823); //9.6kbps 23
ldi R16,51235
ldi R17,200
rcall _RFXX_WRT_CMD
.dbline 249
; RFXX_WRT_CMD(0xC220); //使用位同步时钟
ldi R16,49696
ldi R17,194
rcall _RFXX_WRT_CMD
.dbline 250
; RFXX_WRT_CMD(0xC001); //初始化完毕,关闭所有功能模块
ldi R16,49153
ldi R17,192
rcall _RFXX_WRT_CMD
.dbline 251
; PORTB|=(1<<RFXX_DATA);
sbi 0x18,1
.dbline 252
; DDRB|=(1<<RFXX_DATA);//将PB1置为输出
sbi 0x17,1
.dbline 254
;
; TIM0_init();
rcall _TIM0_init
L50:
.dbline 256
;
; while(1);
L51:
.dbline 256
rjmp L50
X13:
.dbline -2
L49:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile F:\915M\发射\发射.c
_adc_mux::
.blkb 1
.dbsym e adc_mux _adc_mux c
_ch3::
.blkb 1
.dbsym e ch3 _ch3 c
_ch2::
.blkb 1
.dbsym e ch2 _ch2 c
_ch1::
.blkb 1
.dbsym e ch1 _ch1 c
_ch0::
.blkb 1
.dbsym e ch0 _ch0 c
; }
;
;
;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -