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

📄 send.lst

📁 使用MEGA8控制RF01芯片,用射频915MHz发送四路AD采样的信号
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -