📄 send.lst
字号:
__text_start:
__start:
14 E5CF LDI R28,0x5F
15 E0D4 LDI R29,4
16 BFCD OUT 0x3D,R28
17 BFDE OUT 0x3E,R29
18 51C0 SUBI R28,0x10
19 40D0 SBCI R29,0
1A EA0A LDI R16,0xAA
1B 8308 STD Y+0,R16
1C 2400 CLR R0
1D E6E2 LDI R30,0x62
1E E0F0 LDI R31,0
1F E010 LDI R17,0
20 36E7 CPI R30,0x67
21 07F1 CPC R31,R17
22 F011 BEQ 0x0025
23 9201 ST R0,Z+
24 CFFB RJMP 0x0020
25 8300 STD Z+0,R16
26 E2E6 LDI R30,0x26
27 E0F0 LDI R31,0
28 E6A0 LDI R26,0x60
29 E0B0 LDI R27,0
2A E010 LDI R17,0
2B E000 LDI R16,0
2C BF0B OUT 0x3B,R16
2D 32E8 CPI R30,0x28
2E 07F1 CPC R31,R17
2F F021 BEQ 0x0034
30 95C8 LPM
31 9631 ADIW R30,1
32 920D ST R0,X+
33 CFF9 RJMP 0x002D
34 D12C RCALL _main
_exit:
35 CFFF RJMP _exit
_Delay_ms:
i --> R10
p --> R20
amS --> R16
36 92AA ST R10,-Y
37 934A ST R20,-Y
FILE: F:\915M\发射\发射.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include <stdio.h>
(0004)
(0005) #define DDR_IN 0
(0006) #define DDR_OUT 1
(0007)
(0008) #define PORT_SEL PORTB
(0009) #define PIN_SEL PINB
(0010) #define DDR_SEL DDRB
(0011)
(0012) #define PORT_SDI PORTB
(0013) #define PIN_SDI PINB
(0014) #define DDR_SDI DDRB
(0015)
(0016) #define PORT_SCK PORTB
(0017) #define PIN_SCK PINB
(0018) #define DDR_SCK DDRB
(0019)
(0020) #define PORT_SDO PORTB
(0021) #define PIN_SDO PINB
(0022) #define DDR_SDO DDRB
(0023)
(0024) #define PB7 7
(0025) #define PB6 6
(0026) #define RFXX_SCK 5
(0027) #define RFXX_SDO 4
(0028) #define RFXX_SDI 3
(0029) #define RFXX_SEL 2
(0030) #define RFXX_DATA 1
(0031) #define PB0 0
(0032)
(0033) #define SEL_OUTPUT() DDR_SEL|=(1<<RFXX_SEL)
(0034) #define HI_SEL() PORT_SEL|=(1<<RFXX_SEL)
(0035) #define LOW_SEL() PORT_SEL&=~(1<<RFXX_SEL)
(0036)
(0037) #define SDI_OUTPUT() DDR_SDI|=(1<<RFXX_SDI)
(0038) #define HI_SDI() PORT_SDI|=(1<<RFXX_SDI)
(0039) #define LOW_SDI() PORT_SDI&=~(1<<RFXX_SDI)
(0040)
(0041) #define SDO_INPUT() DDR_SDO&=~(1<<RFXX_SDO)
(0042) #define SDO_HI() PIN_SDO&=(1<<RFXX_SDO)
(0043) #define SCK_OUTPUT() DDR_SCK|=(1<<RFXX_SCK)
(0044) #define HI_SCK() PORT_SCK|=(1<<RFXX_SCK)
(0045) #define LOW_SCK() PORT_SCK&=~(1<<RFXX_SCK)
(0046)
(0047) #pragma interrupt_handler TIM0_ovf:10
(0048)
(0049) #define baud 19200
(0050) #define fosc 8000000
(0051)
(0052) #define uchar unsigned char
(0053) #define uint unsigned int
(0054)
(0055) uint n=0;
(0056) uchar ch0,ch1,ch2,ch3; //j,k,l,m;
(0057) uchar adc_mux; //AD通道
(0058)
(0059) /*延时*/
(0060) void Delay_ms(unsigned char amS)
(0061) {
(0062) uchar i,p;
(0063) for(i=0;i<amS;i++)
38 24AA CLR R10
39 C006 RJMP 0x0040
(0064) for(p=0;p<200;p++)
3A 2744 CLR R20
3B C001 RJMP 0x003D
3C 9543 INC R20
3D 3C48 CPI R20,0xC8
3E F3E8 BCS 0x003C
3F 94A3 INC R10
40 16A0 CP R10,R16
41 F3C0 BCS 0x003A
42 9149 LD R20,Y+
43 90A9 LD R10,Y+
44 9508 RET
(0065) ;
(0066) }
(0067)
(0068) /*获取AD值*/
(0069) uchar get_ad(void)
(0070) {
(0071) uchar ad_value;
(0072) while(!(ADCSRA & (1 << ADIF))); //等待
_get_ad:
ad_value --> R16
45 9B34 SBIS 0x06,4
46 CFFE RJMP _get_ad
(0073) ad_value = ADCH;
47 B105 IN R16,0x05
(0074) ADCSRA &= ~(1 << ADIF); //清标志
48 9834 CBI 0x06,4
(0075) return ad_value;
49 9508 RET
_start_AD:
4A 92AA ST R10,-Y
(0076) }
(0077)
(0078) /*AD变换开始*/
(0079) void start_AD(void)
(0080) {
(0081) adc_mux=0; //AD通道0
4B 2422 CLR R2
4C 9220 0062 STS adc_mux,R2
(0082) ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f); //取VCC为参考值,AD0模拟变量输入
4E 2D82 MOV R24,R2
4F 708F ANDI R24,0xF
50 6680 ORI R24,0x60
51 B987 OUT 0x07,R24
(0083) ADCSRA|=0xC0; //AD转换启动
52 B186 IN R24,0x06
53 6C80 ORI R24,0xC0
54 B986 OUT 0x06,R24
(0084) ch0=get_ad();
55 DFEF RCALL _get_ad
56 9300 0066 STS ch0,R16
(0085)
(0086) adc_mux=1; //AD通道1
58 E081 LDI R24,1
59 9380 0062 STS adc_mux,R24
(0087) ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
5B 708F ANDI R24,0xF
5C 6680 ORI R24,0x60
5D B987 OUT 0x07,R24
(0088) ADCSRA|=0xC0; //AD转换启动
5E B186 IN R24,0x06
5F 6C80 ORI R24,0xC0
60 B986 OUT 0x06,R24
(0089) ch1=get_ad();
61 DFE3 RCALL _get_ad
62 9300 0065 STS ch1,R16
(0090)
(0091) adc_mux=2; //AD通道2
64 E082 LDI R24,2
65 9380 0062 STS adc_mux,R24
(0092) ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
67 708F ANDI R24,0xF
68 6680 ORI R24,0x60
69 B987 OUT 0x07,R24
(0093) ADCSRA|=0xC0; //AD转换启动
6A B186 IN R24,0x06
6B 6C80 ORI R24,0xC0
6C B986 OUT 0x06,R24
(0094) ch2=get_ad();
6D DFD7 RCALL _get_ad
6E 2EA0 MOV R10,R16
6F 92A0 0064 STS ch2,R10
(0095)
(0096) adc_mux=3; //AD通道3
71 E083 LDI R24,3
72 9380 0062 STS adc_mux,R24
(0097) ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
74 708F ANDI R24,0xF
75 6680 ORI R24,0x60
76 B987 OUT 0x07,R24
(0098) ADCSRA|=0xC0; //AD转换启动
77 B186 IN R24,0x06
78 6C80 ORI R24,0xC0
79 B986 OUT 0x06,R24
(0099) ch3=get_ad();
7A DFCA RCALL _get_ad
7B 2EA0 MOV R10,R16
7C 92A0 0063 STS ch3,R10
7E 90A9 LD R10,Y+
7F 9508 RET
_RFXX_WRT_CMD:
temp --> R20
i --> R22
aCmd --> R16
80 D0FC RCALL push_xgsetF000
(0100) }
(0101)
(0102) /*发射数据写入*/
(0103) void RFXX_WRT_CMD(uint aCmd)
(0104) {
(0105) uchar i;
(0106) uint temp;
(0107) LOW_SCK();
81 98C5 CBI 0x18,5
(0108) LOW_SEL();
82 98C2 CBI 0x18,2
(0109) for(i=0;i<16;i++)
83 2766 CLR R22
84 C012 RJMP 0x0097
(0110) {
(0111) temp<<=1;
85 0F44 LSL R20
86 1F55 ROL R21
(0112) if(SDO_HI())
87 B386 IN R24,0x16
88 7180 ANDI R24,0x10
89 BB86 OUT 0x16,R24
8A 2388 TST R24
8B F009 BEQ 0x008D
(0113) { temp|=0x0001; }
8C 6041 ORI R20,1
(0114) LOW_SCK();
8D 98C5 CBI 0x18,5
(0115) if(aCmd&0x8000) HI_SDI();
8E FF17 SBRS R17,7
8F C002 RJMP 0x0092
90 9AC3 SBI 0x18,3
91 C001 RJMP 0x0093
(0116) else LOW_SDI();
92 98C3 CBI 0x18,3
(0117) HI_SCK();
93 9AC5 SBI 0x18,5
(0118) aCmd<<=1;
94 0F00 LSL R16
95 1F11 ROL R17
96 9563 INC R22
97 3160 CPI R22,0x10
98 F360 BCS 0x0085
(0119) }
(0120) LOW_SCK();
99 98C5 CBI 0x18,5
(0121) HI_SEL();
9A 9AC2 SBI 0x18,2
9B C0E6 RJMP pop_xgsetF000
_RF02_SEND:
i --> R20
aByte --> R16
9C 934A ST R20,-Y
(0122) }
(0123)
(0124) /*发射数据*/
(0125) void RF02_SEND(uchar aByte)
(0126) {
(0127) uchar i;
(0128) for(i=0;i<8;i++)
9D 2744 CLR R20
9E C00B RJMP 0x00AA
(0129) {
(0130) while(PINB&(1<<RFXX_SDO));
9F 99B4 SBIC 0x16,4
A0 CFFE RJMP 0x009F
(0131) while(!(PINB&(1<<RFXX_SDO)));
A1 9BB4 SBIS 0x16,4
A2 CFFE RJMP 0x00A1
(0132) if(aByte&0x80) PORTB|=(1<<RFXX_DATA);
A3 FF07 SBRS R16,7
A4 C002 RJMP 0x00A7
A5 9AC1 SBI 0x18,1
A6 C001 RJMP 0x00A8
(0133) else PORTB&=~(1<<RFXX_DATA);
A7 98C1 CBI 0x18,1
(0134) aByte<<=1;
A8 0F00 LSL R16
A9 9543 INC R20
AA 3048 CPI R20,0x8
AB F398 BCS 0x009F
AC 9149 LD R20,Y+
AD 9508 RET
(0135) }
(0136) }
(0137)
(0138) /*字符输出函数*/
(0139) void Transmit(uchar Send_Data)
(0140) {
(0141) while (!(UCSRA & (1<<UDRE)));//判断是否发送完成
_Transmit:
Send_Data --> R16
AE 9B5D SBIS 0x0B,5
AF CFFE RJMP _Transmit
(0142) UDR=Send_Data;//发送数据
B0 B90C OUT 0x0C,R16
B1 9508 RET
(0143) }
(0144)
(0145) /*T0初始化*/
(0146) void TIM0_init(void)
(0147) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -