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

📄 fjv14.lis

📁 一本关于控制系统仿真的书的程序 1、文件夹1中的程序是书中的一些仿真。 2、文件2中的是最近做的预测控制、PID控制及逻辑控制的对比综合研究。 3、文件夹3中是与maltab通信的数据采集板的设
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module fjv14.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\采集卡项目\单片机程序\fjv14\fjv14.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 37
 0000           ; //m8L,4M晶振,波特率2400
 0000           ;  #include "iom8v.h"
 0000           ;  #include"macros.h"
 0000           ;  #include"stdio.h"
 0000           ; //控制DA的cs位
 0000           ;  #define set_cs  PORTB |= (1<<PB2)     
 0000           ;  #define clr_cs  PORTB &= 0b11111011   
 0000           ; 
 0000           ;  #define IO_PB0  0x00
 0000           ;  #define IO_PB1  0x01
 0000           ;  #define IO_PB4  0x04
 0000           ;  #define IO_PD5  0x05
 0000           ;  #define IO_PD6  0x06
 0000           ;  #define IO_PD7  0x07
 0000           ;         
 0000           ; //定义全局变量-------------------------------
 0000           ;  unsigned int AD_value10;//ad采集值10位。
 0000           ;  
 0000           ;  
 0000           ;  //------------------------------------------
 0000           ;  unsigned int  ADC_filter(void);
 0000           ;  void init_devices(void);
 0000           ;  unsigned char USART_Recive(void);
 0000           ; void USART_Transmit(unsigned char tdata);
 0000           ; void ADC_Start(void);
 0000           ; unsigned int ADC_Value (unsigned char adc_channel);
 0000           ; void DAC_5617_10(unsigned char dac_dataH,unsigned char dac_dataL,unsigned char dac_channel);
 0000           ; void SPI_Transmit(unsigned char dac_data);
 0000           ; unsigned char  SPI_Compare(unsigned char data,unsigned char mark);
 0000           ; void delay_1ms(void);
 0000           ; unsigned char Strcat(unsigned char s1,unsigned char s2);
 0000           ; void IO_out(unsigned char IO_data,unsigned char IO_channel);
 0000           ; unsigned char IO_in (unsigned char IO_channel);
 0000           ; 
 0000           ; /**************************************************************************/
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 38
 0000           ;       PORTB = 0xFF;//确保复位电平是确定的,输入、上拉
 0000 8FEF              ldi R24,255
 0002 88BB              out 0x18,R24
 0004                   .dbline 39
 0004           ;       DDRB  = 0x00;
 0004 2224              clr R2
 0006 27BA              out 0x17,R2
 0008                   .dbline 40
 0008           ;       PORTC = 0xFF;
 0008 85BB              out 0x15,R24
 000A                   .dbline 41
 000A           ;       DDRC  = 0x00;
 000A 24BA              out 0x14,R2
 000C                   .dbline 42
 000C           ;       PORTD = 0xFF;
 000C 82BB              out 0x12,R24
 000E                   .dbline 43
 000E           ;       DDRD=0x00;
 000E 21BA              out 0x11,R2
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e watchdog_init _watchdog_init fV
                        .even
 0012           _watchdog_init::
 0012                   .dbline -1
 0012                   .dbline 49
 0012           ; }
 0012           ; /********************************************************************/
 0012           ; //Watchdog initialize
 0012           ; // prescale: 512K 0.52s
 0012           ; void watchdog_init(void)
 0012           ; {
 0012                   .dbline 50
 0012           ;  WDR(); //this prevents a timout on enabling
 0012 A895              wdr
 0014                   .dbline 51
 0014           ;  WDTCR = 0x0D; //WATCHDOG ENABLED - dont forget to issue WDRs
 0014 8DE0              ldi R24,13
 0016 81BD              out 0x21,R24
 0018                   .dbline -2
 0018           L2:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e WDT_off _WDT_off fV
                        .even
 001A           _WDT_off::
 001A                   .dbline -1
 001A                   .dbline 56
 001A           ; }
 001A           ; /*********************************************************************/
 001A           ; //关闭看门狗
 001A           ; void WDT_off(void)
 001A           ; {
 001A                   .dbline 57
 001A           ;     _WDR();
 001A A895              wdr
 001C                   .dbline 58
 001C           ;       WDTCR |= (1<<WDCE)|(1<<WDE);
 001C 81B5              in R24,0x21
 001E 8861              ori R24,24
 0020 81BD              out 0x21,R24
 0022                   .dbline 59
 0022           ;       WDTCR = 0x00;
 0022 2224              clr R2
 0024 21BC              out 0x21,R2
 0026                   .dbline -2
 0026           L3:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbend
 0028                   .dbfunc e uart0_init _uart0_init fV
                        .even
 0028           _uart0_init::
 0028                   .dbline -1
 0028                   .dbline 63
 0028           ; }
 0028           ; /**************************************************************************/
 0028           ; void uart0_init(void)
 0028           ; {
 0028                   .dbline 64
 0028           ;        UCSRB=(1<<RXEN)|(1<<TXEN);//发送接收使能
 0028 88E1              ldi R24,24
 002A 8AB9              out 0xa,R24
 002C                   .dbline 65
 002C           ;        UCSRC=(1<<UMSEL);//选择异步发送模式
 002C 80E4              ldi R24,64
 002E 80BD              out 0x20,R24
 0030                   .dbline 66
 0030           ;        UBRRL = 0x33;//设置波特率低位4m4800
 0030 83E3              ldi R24,51
 0032 89B9              out 0x9,R24
 0034                   .dbline 67
 0034           ;        UBRRH = 0x00; //设置波特率高位
 0034 2224              clr R2
 0036 20BC              out 0x20,R2
 0038                   .dbline 68
 0038           ;        UCSRA = 0x18;  //接收、发送数据
 0038 88E1              ldi R24,24
 003A 8BB9              out 0xb,R24
 003C                   .dbline 69
 003C           ;        UCSRC =(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
 003C 86E8              ldi R24,134
 003E 80BD              out 0x20,R24
 0040                   .dbline -2
 0040           L4:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbend
 0042                   .dbfunc e spi_init _spi_init fV
                        .even
 0042           _spi_init::
 0042                   .dbline -1
 0042                   .dbline 74
 0042           ; }
 0042           ; 
 0042           ; /************************************************************************/
 0042           ; void  spi_init(void)
 0042           ; {     
 0042                   .dbline 77
 0042           ;        //PB2为CS端。PB3为MOSI端。PB5为SCK端。
 0042           ;        // PORTB=(1<<PB2)|(1<<PB3)|(1<<PB5);//SPI端口初始化.慎用<<置1。将会影响其他位。
 0042           ;         DDRB= (1<<DDB2)|(1<<DDB3)|(1<<DDB5);//SPI端口初始化
 0042 8CE2              ldi R24,44
 0044 87BB              out 0x17,R24
 0046                   .dbline 78
 0046           ;         SPSR=0x01;//SPI状态寄存器初始化
 0046 81E0              ldi R24,1
 0048 8EB9              out 0xe,R24
 004A                   .dbline 79
 004A           ;         SPCR=0x58; //SPI使能 
 004A 88E5              ldi R24,88
 004C 8DB9              out 0xd,R24
 004E                   .dbline -2
 004E           L5:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbend
 0050                   .dbfunc e adc_init _adc_init fV
                        .even
 0050           _adc_init::
 0050                   .dbline -1
 0050                   .dbline 86
 0050           ; }
 0050           ; /*************************************************************************/
 0050           ; //ADC initialize
 0050           ; // Conversion time: 52uS
 0050           ; 
 0050           ; void adc_init(void)
 0050           ; {
 0050                   .dbline 87
 0050           ;    PORTC =(0<<PC0)|(0<<PC1)|(0<<PC2)|(0<<PC3) ;//关闭上拉电阻
 0050 2224              clr R2
 0052 25BA              out 0x15,R2
 0054                   .dbline 88
 0054           ;    ACSR  = 0x00;//与模拟比较器控制
 0054 28B8              out 0x8,R2
 0056                   .dbline 90
 0056           ;       //ACSR =(1<<ACD);//关闭模拟比较器
 0056           ;    ADMUX=0x00;//设定AD选择寄存器,片外基准。ch1通道(对应芯片ADC0)。数据右对齐。      
 0056 27B8              out 0x7,R2
 0058                   .dbline 91
 0058           ;    ADCSRA = 0x00;  //disable adc
 0058 26B8              out 0x6,R2
 005A                   .dbline 92
 005A           ;    ADCSRA=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(0<<ADPS1) ;//16分频,使能AD,开启中断。还没开始转换。
 005A 8CE8              ldi R24,140
 005C 86B9              out 0x6,R24
 005E                   .dbline -2
 005E           L6:
 005E                   .dbline 0 ; func end
 005E 0895              ret
 0060                   .dbend
                        .area vector(rom, abs)
                        .org 28
 001C 30C0              rjmp _adc_isr
                        .area text(rom, con, rel)
 0060                   .dbfile D:\采集卡项目\单片机程序\fjv14\fjv14.c
 0060                   .dbfunc e adc_isr _adc_isr fV
                        .even
 0060           _adc_isr::
 0060 2A92              st -y,R2
 0062 3A92              st -y,R3
 0064 4A92              st -y,R4
 0066 5A92              st -y,R5
 0068 2FB6              in R2,0x3f
 006A 2A92              st -y,R2
 006C                   .dbline -1
 006C                   .dbline 99
 006C           ;    
 006C           ;  
 006C           ;  }
 006C           ; /*************************************************************************/
 006C           ; #pragma interrupt_handler adc_isr:15
 006C           ; void adc_isr(void)
 006C           ; {
 006C                   .dbline 101
 006C           ;  //conversion complete, read value (int) using...
 006C           ;      AD_value10 = ADCL;            //Read 8 low bits first (important)
 006C 24B0              in R2,0x4
 006E 3324              clr R3
 0070 30920100          sts _AD_value10+1,R3
 0074 20920000          sts _AD_value10,R2
 0078                   .dbline 102
 0078           ;      AD_value10|=(unsigned int)ADCH << 8; //read 2 high bits and shift into top byte
 0078 25B0              in R2,0x5
 007A 3324              clr R3
 007C 322C              mov R3,R2
 007E 2224              clr R2
 0080 40900000          lds R4,_AD_value10
 0084 50900100          lds R5,_AD_value10+1
 0088 4228              or R4,R2
 008A 5328              or R5,R3
 008C 50920100          sts _AD_value10+1,R5
 0090 40920000          sts _AD_value10,R4
 0094                   .dbline -2
 0094           L7:
 0094 2990              ld R2,y+
 0096 2FBE              out 0x3f,R2
 0098 5990              ld R5,y+
 009A 4990              ld R4,y+
 009C 3990              ld R3,y+
 009E 2990              ld R2,y+
 00A0                   .dbline 0 ; func end
 00A0 1895              reti
 00A2                   .dbend
 00A2                   .dbfunc e init_devices _init_devices fV
                        .even
 00A2           _init_devices::
 00A2                   .dbline -1
 00A2                   .dbline 107
 00A2           ;       
 00A2           ; }
 00A2           ; /*************************************************************************/
 00A2           ; void init_devices(void)
 00A2           ; {
 00A2                   .dbline 108
 00A2           ;    CLI(); //关闭所有中断
 00A2 F894              cli
 00A4                   .dbline 109
 00A4           ;    port_init();//端口初始化
 00A4 ADDF              rcall _port_init
 00A6                   .dbline 110
 00A6           ;    watchdog_init();
 00A6 B5DF              rcall _watchdog_init
 00A8                   .dbline 111
 00A8           ;    uart0_init();//串行通信初始化
 00A8 BFDF              rcall _uart0_init
 00AA                   .dbline 112
 00AA           ;    adc_init();//AD初始化
 00AA D2DF              rcall _adc_init
 00AC                   .dbline 113
 00AC           ;    spi_init();//SPI初始化
 00AC CADF              rcall _spi_init
 00AE                   .dbline 114
 00AE           ;    MCUCR = 0x10;//ADC噪声抑制模式。
 00AE 80E1              ldi R24,16
 00B0 85BF              out 0x35,R24
 00B2                   .dbline 115
 00B2           ;    GICR  = 0x00;//关外部中断
 00B2 2224              clr R2
 00B4 2BBE              out 0x3b,R2
 00B6                   .dbline 116
 00B6           ;    SEI();
 00B6 7894              sei
 00B8                   .dbline -2
 00B8           L8:
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbend

⌨️ 快捷键说明

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