📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\PROJECT\高精度三维太阳自动跟踪器\程序\传感器控制/lcm12864.h
0000 .dbfunc e delayus _delayus fV
0000 ; us -> R16
.even
0000 _delayus::
0000 .dbline -1
0000 .dbline 33
0000 ; /*****************************************
0000 ; * 基于AD转化程序设计 *
0000 ; * 功 能:AD转化 *
0000 ; * 时钟频率:内部8M *
0000 ; * 设 计:莫锦攀 *
0000 ; * 修改日期:2007年07月04日 *
0000 ; * 编译环境:ICC-AVR6.31 *
0000 ; * 实验环境:M16学习板 *
0000 ; * 使用端口:PC6,PC7,PA4~PA7,PA0 *
0000 ; *****************************************/
0000 ;
0000 ; #include <iom128v.h>
0000 ; #include <macros.h>
0000 ; #include "lcm12864.h"
0000 ; #include "delay.h"
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; uchar Data[5]={0,0,0,0,0};//初始值为0000,最后一个0是结束符
0000 ; void change(uint i,uchar *p) //显示处理
0000 ; {p[3]=i%10+48;//个
0000 ; p[2]=i/10%10+48;//十
0000 ; p[1]=i/100%10+48;//百
0000 ; p[0]=i/1000%10+48;//千
0000 ; }
0000 ;
0000 ; uint ADC_convert(void)//AD转换函数,读取采样获得的10位数据
0000 ; {
0000 ; uint temp1,temp2;
0000 ; temp1=(uint)ADCL;
0000 ; temp2=(uint)ADCH;
0000 ; temp2=(temp2<<8)+temp1;
0000 ; return temp2;
0000 ; }
0000 .dbline 34
0000 ; void ADC_init(void)
0000 02C0 xjmp L5
0002 L2:
0002 .dbline 35
0002 .dbline 35
0002 A895 wdr
0004 .dbline 35
0004 L3:
0004 .dbline 34
0004 0A95 dec R16
0006 L5:
0006 .dbline 34
0006 0023 tst R16
0008 E1F7 brne L2
000A .dbline -2
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbsym r us 16 c
000C .dbend
000C .dbfunc e delayms _delayms fV
000C ; i -> R20,R21
000C ; ms -> R16,R17
.even
000C _delayms::
000C 0E940000 xcall push_gset1
0010 .dbline -1
0010 .dbline 39
0010 ; { ADMUX=0x01; //选择通道PA0;外部REF+5V
0010 ; ADCSRA|=((1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0));
0010 ; //使能AD;启动AD;自由转换模式;8分频
0010 ; // ADCSRA=0xc2;
0010 ; }
0010 .dbline 42
0010 ;
0010 ; void main(void)
0010 ; {uint i,j;
0010 0CC0 xjmp L10
0012 L7:
0012 .dbline 43
0012 ; //uchar a;
0012 .dbline 43
0012 4DEC ldi R20,461
0014 51E0 ldi R21,1
0016 04C0 xjmp L14
0018 L11:
0018 .dbline 44
0018 .dbline 44
0018 A895 wdr
001A .dbline 44
001A A895 wdr
001C .dbline 44
001C L12:
001C .dbline 43
001C 4150 subi R20,1
001E 5040 sbci R21,0
0020 L14:
0020 .dbline 43
0020 4030 cpi R20,0
0022 4507 cpc R20,R21
0024 C9F7 brne L11
0026 X0:
0026 .dbline 45
0026 L8:
0026 .dbline 42
0026 0150 subi R16,1
0028 1040 sbci R17,0
002A L10:
002A .dbline 42
002A 0030 cpi R16,0
002C 0107 cpc R16,R17
002E 89F7 brne L7
0030 X1:
0030 .dbline -2
0030 L6:
0030 0E940000 xcall pop_gset1
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 20 i
0036 .dbsym r ms 16 i
0036 .dbend
0036 .dbfunc e data_trans _data_trans fV
0036 ; i -> R20
0036 ; data -> R16
.even
0036 _data_trans::
0036 0E940000 xcall push_gset1
003A .dbline -1
003A .dbline 51
003A ; PORTA = 0x00;
003A ; DDRA = 0xFF;
003A ; PORTB = 0x01;
003A ; DDRB = 0xFF;
003A ; PORTC = 0x00; //m103 output only
003A ; DDRC = 0x00;
003A ; PORTD = 0x00;
003A ; DDRD = 0x0f;
003A .dbline 54
003A ; PORTE = 0x00;
003A ; DDRE = 0xF0;
003A ; PORTF = 0x00;
003A 48E0 ldi R20,8
003C 09C0 xjmp L19
003E L16:
003E .dbline 55
003E ; DDRF = 0x00;
003E .dbline 55
003E 07FF sbrs R16,7
0040 02C0 rjmp L20
0042 .dbline 55
0042 C69A sbi 0x18,6
0044 01C0 xjmp L21
0046 L20:
0046 .dbline 56
0046 ; PORTG = 0x00;
0046 C698 cbi 0x18,6
0048 L21:
0048 .dbline 57
0048 C498 cbi 0x18,4
004A .dbline 58
004A 000F lsl R16
004C .dbline 59
004C C49A sbi 0x18,4
004E .dbline 60
004E L17:
004E .dbline 54
004E 4A95 dec R20
0050 L19:
0050 .dbline 54
0050 4423 tst R20
0052 A9F7 brne L16
0054 .dbline -2
0054 L15:
0054 0E940000 xcall pop_gset1
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r i 20 c
005A .dbsym r data 16 c
005A .dbend
005A .dbfunc e Send_CMD _Send_CMD fV
005A ; temp -> R20
005A ; com -> R22
.even
005A _Send_CMD::
005A 0E940000 xcall push_gset2
005E 602F mov R22,R16
0060 .dbline -1
0060 .dbline 64
0060 ; DDRG = 0x00;
0060 ;
0060 ; LCM_init();//液晶初始化
0060 ; //DisHZ(0x89,11,"正在启动...");
0060 ; /*// ADMUX=(1<<REFS0)|(1<<REFS1);//选择第一通道ADC0,内部REF(2.56V)
0060 ; ADMUX=0x01;
0060 ; ADCSRA=0xe5;//8M32分频,125k速率,自由模式;启动AD转换器*/
0060 ;
0060 .dbline 67
0060 ;
0060 ; ADC_init();
0060 ;
0060 C59A sbi 0x18,5
0062 .dbline 68
0062 ; delay_nms(10);//延迟100ms等待系统稳定后读取数据
0062 48EF ldi R20,248
0064 .dbline 69
0064 ;
0064 042F mov R16,R20
0066 E7DF xcall _data_trans
0068 .dbline 70
0068 ;
0068 462F mov R20,R22
006A 407F andi R20,240
006C .dbline 71
006C ; while(1)
006C 042F mov R16,R20
006E E3DF xcall _data_trans
0070 .dbline 72
0070 ; {
0070 462F mov R20,R22
0072 4F70 andi R20,15
0074 .dbline 72
0074 842F mov R24,R20
0076 8F70 andi R24,#0x0F
0078 8295 swap R24
007A 482F mov R20,R24
007C .dbline 73
007C ;
007C 082F mov R16,R24
007E DBDF xcall _data_trans
0080 .dbline 74
0080 ; i=ADC_convert();
0080 C598 cbi 0x18,5
0082 .dbline 75
0082 ; j=0;
0082 06E4 ldi R16,70
0084 BDDF xcall _delayus
0086 .dbline -2
0086 L22:
0086 0E940000 xcall pop_gset2
008A .dbline 0 ; func end
008A 0895 ret
008C .dbsym r temp 20 c
008C .dbsym r com 22 c
008C .dbend
008C .dbfunc e LCD_Set_DDRAM _LCD_Set_DDRAM fV
008C ; addr -> R20
.even
008C _LCD_Set_DDRAM::
008C 0E940000 xcall push_gset1
0090 402F mov R20,R16
0092 .dbline -1
0092 .dbline 79
0092 ; change(i,Data);
0092 ; DisHZXY(0,0,10,"AD测试程序");
0092 ; DisHZXY(3,1,4,Data);
0092 ; if(i>650)
0092 .dbline 79
0092 042F mov R16,R20
0094 E2DF xcall _Send_CMD
0096 .dbline -2
0096 L23:
0096 0E940000 xcall pop_gset1
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r addr 20 c
009C .dbend
009C .dbfunc e LCD_HOME _LCD_HOME fV
.even
009C _LCD_HOME::
009C .dbline -1
009C .dbline 82
009C ; { DisHZXY(2,3,4,"正转");
009C ; PORTA|=(1<<2);
009C ; PORTC|=(1<<6);
009C .dbline 82
009C 02E0 ldi R16,2
009E DDDF xcall _Send_CMD
00A0 .dbline -2
00A0 L24:
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbend
00A2 .dbfunc e LCD_CLR _LCD_CLR fV
.even
00A2 _LCD_CLR::
00A2 .dbline -1
00A2 .dbline 85
00A2 ; while(j<=2000)
00A2 ; {
00A2 ; PORTA|=(1<<3);
00A2 .dbline 85
00A2 01E0 ldi R16,1
00A4 DADF xcall _Send_CMD
00A6 .dbline 85
00A6 02E0 ldi R16,2
00A8 10E0 ldi R17,0
00AA B0DF xcall _delayms
00AC .dbline -2
00AC L25:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbend
00AE .dbfunc e Send_DATA _Send_DATA fV
00AE ; temp -> R20
00AE ; data -> R22
.even
00AE _Send_DATA::
00AE 0E940000 xcall push_gset2
00B2 602F mov R22,R16
00B4 .dbline -1
00B4 .dbline 88
00B4 ; delay_nus(17);
00B4 ; PORTA&=~(1<<3);
00B4 ; delay_nus(17);
00B4 .dbline 90
00B4 ; j++;
00B4 ; }
00B4 C59A sbi 0x18,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -