📄 fjv14.lis
字号:
.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 + -