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

📄 发射.lis

📁 使用MEGA8控制RF01芯片,用射频915MHz发送四路AD采样的信号
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module _发射.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\915M\发射\发射.c
                        .area vector(rom, abs)
                        .org 18
 0012 89C0              rjmp _TIM0_ovf
                        .area text(rom, con, rel)
 0000                   .dbfile F:\915M\发射\发射.c
                        .area data(ram, con, rel)
 0000                   .dbfile F:\915M\发射\发射.c
 0000           _n::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile F:\915M\发射\发射.c
 0002                   .dbsym e n _n i
                        .area text(rom, con, rel)
 0000                   .dbfile F:\915M\发射\发射.c
 0000                   .dbfunc e Delay_ms _Delay_ms fV
 0000           ;              i -> R10
 0000           ;              p -> R20
 0000           ;            amS -> R16
                        .even
 0000           _Delay_ms::
 0000 AA92              st -y,R10
 0002 4A93              st -y,R20
 0004                   .dbline -1
 0004                   .dbline 61
 0004           ; #include <iom8v.h>
 0004           ; #include <macros.h>
 0004           ; #include <stdio.h>
 0004           ; 
 0004           ; #define DDR_IN  0
 0004           ; #define DDR_OUT 1
 0004           ; 
 0004           ; #define PORT_SEL  PORTB
 0004           ; #define PIN_SEL   PINB
 0004           ; #define DDR_SEL   DDRB
 0004           ; 
 0004           ; #define PORT_SDI  PORTB
 0004           ; #define PIN_SDI   PINB
 0004           ; #define DDR_SDI   DDRB
 0004           ; 
 0004           ; #define PORT_SCK  PORTB
 0004           ; #define PIN_SCK   PINB
 0004           ; #define DDR_SCK   DDRB
 0004           ; 
 0004           ; #define PORT_SDO  PORTB
 0004           ; #define PIN_SDO   PINB
 0004           ; #define DDR_SDO   DDRB
 0004           ; 
 0004           ; #define PB7        7
 0004           ; #define PB6        6
 0004           ; #define RFXX_SCK   5
 0004           ; #define RFXX_SDO   4
 0004           ; #define RFXX_SDI   3
 0004           ; #define RFXX_SEL   2
 0004           ; #define RFXX_DATA  1
 0004           ; #define PB0      0
 0004           ; 
 0004           ; #define SEL_OUTPUT()   DDR_SEL|=(1<<RFXX_SEL)
 0004           ; #define HI_SEL()       PORT_SEL|=(1<<RFXX_SEL)        
 0004           ; #define LOW_SEL()      PORT_SEL&=~(1<<RFXX_SEL)
 0004           ; 
 0004           ; #define SDI_OUTPUT()   DDR_SDI|=(1<<RFXX_SDI)
 0004           ; #define HI_SDI()       PORT_SDI|=(1<<RFXX_SDI)        
 0004           ; #define LOW_SDI()      PORT_SDI&=~(1<<RFXX_SDI)
 0004           ; 
 0004           ; #define SDO_INPUT()   DDR_SDO&=~(1<<RFXX_SDO)
 0004           ; #define SDO_HI()       PIN_SDO&=(1<<RFXX_SDO) 
 0004           ; #define SCK_OUTPUT()   DDR_SCK|=(1<<RFXX_SCK)
 0004           ; #define HI_SCK()       PORT_SCK|=(1<<RFXX_SCK)
 0004           ; #define LOW_SCK()      PORT_SCK&=~(1<<RFXX_SCK)
 0004           ; 
 0004           ; #pragma interrupt_handler TIM0_ovf:10
 0004           ; 
 0004           ; #define baud 19200
 0004           ; #define fosc 8000000
 0004           ; 
 0004           ; #define uchar unsigned char
 0004           ; #define uint  unsigned int
 0004           ; 
 0004           ; uint n=0;
 0004           ; uchar ch0,ch1,ch2,ch3; //j,k,l,m;
 0004           ; uchar adc_mux;  //AD通道
 0004           ; 
 0004           ; /*延时*/
 0004           ; void Delay_ms(unsigned char amS)
 0004           ; {
 0004                   .dbline 63
 0004           ;   uchar i,p;
 0004           ;   for(i=0;i<amS;i++)
 0004 AA24              clr R10
 0006 06C0              rjmp L5
 0008           L2:
 0008                   .dbline 64
 0008           ;     for(p=0;p<200;p++)
 0008 4427              clr R20
 000A 01C0              rjmp L9
 000C           L6:
 000C                   .dbline 65
 000C           ;         ;
 000C           L7:
 000C                   .dbline 64
 000C 4395              inc R20
 000E           L9:
 000E                   .dbline 64
 000E 483C              cpi R20,200
 0010 E8F3              brlo L6
 0012           X0:
 0012           L3:
 0012                   .dbline 63
 0012 A394              inc R10
 0014           L5:
 0014                   .dbline 63
 0014 A016              cp R10,R16
 0016 C0F3              brlo L2
 0018           X1:
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 4991              ld R20,y+
 001A A990              ld R10,y+
 001C 0895              ret
 001E                   .dbsym r i 10 c
 001E                   .dbsym r p 20 c
 001E                   .dbsym r amS 16 c
 001E                   .dbend
 001E                   .dbfunc e get_ad _get_ad fc
 001E           ;       ad_value -> R16
                        .even
 001E           _get_ad::
 001E                   .dbline -1
 001E                   .dbline 70
 001E           ; }
 001E           ; 
 001E           ; /*获取AD值*/
 001E           ; uchar get_ad(void)
 001E           ; {
 001E           L11:
 001E                   .dbline 72
 001E           ;  uchar ad_value;
 001E           ;  while(!(ADCSRA & (1 << ADIF)));      //等待
 001E           L12:
 001E                   .dbline 72
 001E 349B              sbis 0x6,4
 0020 FECF              rjmp L11
 0022           X2:
 0022                   .dbline 73
 0022           ;   ad_value = ADCH;
 0022 05B1              in R16,0x5
 0024                   .dbline 74
 0024           ;   ADCSRA &= ~(1 << ADIF);     //清标志
 0024 3498              cbi 0x6,4
 0026                   .dbline 75
 0026           ;   return ad_value;
 0026                   .dbline -2
 0026           L10:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r ad_value 16 c
 0028                   .dbend
 0028                   .dbfunc e start_AD _start_AD fV
                        .even
 0028           _start_AD::
 0028 AA92              st -y,R10
 002A                   .dbline -1
 002A                   .dbline 80
 002A           ; }
 002A           ; 
 002A           ; /*AD变换开始*/
 002A           ; void start_AD(void)
 002A           ; {
 002A                   .dbline 81
 002A           ;   adc_mux=0; //AD通道0
 002A 2224              clr R2
 002C 20920000          sts _adc_mux,R2
 0030                   .dbline 82
 0030           ;   ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);   //取VCC为参考值,AD0模拟变量输入 
 0030 822D              mov R24,R2
 0032 8F70              andi R24,15
 0034 8066              ori R24,96
 0036 87B9              out 0x7,R24
 0038                   .dbline 83
 0038           ;   ADCSRA|=0xC0;           //AD转换启动
 0038 86B1              in R24,0x6
 003A 806C              ori R24,192
 003C 86B9              out 0x6,R24
 003E                   .dbline 84
 003E           ;   ch0=get_ad();
 003E EFDF              rcall _get_ad
 0040 00930400          sts _ch0,R16
 0044                   .dbline 86
 0044           ;  
 0044           ;  adc_mux=1; //AD通道1
 0044 81E0              ldi R24,1
 0046 80930000          sts _adc_mux,R24
 004A                   .dbline 87
 004A           ;  ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
 004A 8F70              andi R24,15
 004C 8066              ori R24,96
 004E 87B9              out 0x7,R24
 0050                   .dbline 88
 0050           ;  ADCSRA|=0xC0;           //AD转换启动
 0050 86B1              in R24,0x6
 0052 806C              ori R24,192
 0054 86B9              out 0x6,R24
 0056                   .dbline 89
 0056           ;  ch1=get_ad();
 0056 E3DF              rcall _get_ad
 0058 00930300          sts _ch1,R16
 005C                   .dbline 91
 005C           ;  
 005C           ;  adc_mux=2; //AD通道2
 005C 82E0              ldi R24,2
 005E 80930000          sts _adc_mux,R24
 0062                   .dbline 92
 0062           ;  ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
 0062 8F70              andi R24,15
 0064 8066              ori R24,96
 0066 87B9              out 0x7,R24
 0068                   .dbline 93
 0068           ;  ADCSRA|=0xC0;           //AD转换启动
 0068 86B1              in R24,0x6
 006A 806C              ori R24,192
 006C 86B9              out 0x6,R24
 006E                   .dbline 94
 006E           ;  ch2=get_ad();
 006E D7DF              rcall _get_ad
 0070 A02E              mov R10,R16
 0072 A0920200          sts _ch2,R10
 0076                   .dbline 96
 0076           ;  
 0076           ;  adc_mux=3; //AD通道3
 0076 83E0              ldi R24,3
 0078 80930000          sts _adc_mux,R24
 007C                   .dbline 97
 007C           ;  ADMUX = (1<<REFS0)|(1<<ADLAR)|(adc_mux&0x0f);
 007C 8F70              andi R24,15
 007E 8066              ori R24,96
 0080 87B9              out 0x7,R24
 0082                   .dbline 98
 0082           ;  ADCSRA|=0xC0;           //AD转换启动
 0082 86B1              in R24,0x6
 0084 806C              ori R24,192
 0086 86B9              out 0x6,R24
 0088                   .dbline 99
 0088           ;  ch3=get_ad();
 0088 CADF              rcall _get_ad
 008A A02E              mov R10,R16
 008C A0920100          sts _ch3,R10
 0090                   .dbline -2
 0090           L14:
 0090                   .dbline 0 ; func end
 0090 A990              ld R10,y+
 0092 0895              ret
 0094                   .dbend
 0094                   .dbfunc e RFXX_WRT_CMD _RFXX_WRT_CMD fV
 0094           ;           temp -> R20,R21
 0094           ;              i -> R22
 0094           ;           aCmd -> R16,R17
                        .even
 0094           _RFXX_WRT_CMD::
 0094 00D0              rcall push_xgsetF000
 0096                   .dbline -1
 0096                   .dbline 104
 0096           ;  }
 0096           ; 
 0096           ; /*发射数据写入*/
 0096           ; void RFXX_WRT_CMD(uint aCmd)
 0096           ; {
 0096                   .dbline 107
 0096           ;   uchar i;
 0096           ;   uint temp;
 0096           ;   LOW_SCK();
 0096 C598              cbi 0x18,5
 0098                   .dbline 108
 0098           ;   LOW_SEL();
 0098 C298              cbi 0x18,2
 009A                   .dbline 109
 009A           ;   for(i=0;i<16;i++)
 009A 6627              clr R22
 009C 12C0              rjmp L19
 009E           L16:
 009E                   .dbline 110
 009E           ;  {
 009E                   .dbline 111
 009E           ;    temp<<=1;
 009E 440F              lsl R20
 00A0 551F              rol R21
 00A2                   .dbline 112
 00A2           ;    if(SDO_HI())
 00A2 86B3              in R24,0x16
 00A4 8071              andi R24,16
 00A6 86BB              out 0x16,R24
 00A8 8823              tst R24
 00AA 09F0              breq L20
 00AC           X3:
 00AC                   .dbline 113
 00AC           ;      { temp|=0x0001; }
 00AC                   .dbline 113
 00AC 4160              ori R20,1
 00AE                   .dbline 113

⌨️ 快捷键说明

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