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

📄 main.lis

📁 基于mega128上实现ad7705的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\各种模块设计\模块程序集\ad7705/delay.h
 0000                   .dbfunc e delay_1us _delay_1us fV
                        .even
 0000           _delay_1us::
 0000                   .dbline -1
 0000                   .dbline 6
 0000           ; #include <iom128v.h>
 0000           ; #include<macros.h>
 0000           ; #include "delay.h"
 0000           ; #include "7705.h"
 0000           ; #include "KeyScay.h"
 0000           ; #include "lcd.h"
 0000                   .dbline 7
 0000           ; 
 0000 0000              nop
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e delay_nus _delay_nus fV
 0004           ;              i -> R20,R21
 0004           ;              n -> R22,R23
                        .even
 0004           _delay_nus::
 0004 0E940000          xcall push_gset2
 0008 B801              movw R22,R16
 000A                   .dbline -1
 000A                   .dbline 11
 000A           ; /****************************************************************************/
 000A           ; //功能: AD7705使用
 000A           ; //输入: 无
 000A           ; //输出: 无
 000A                   .dbline 12
 000A           ; //备注:
 000A 4427              clr R20
 000C 5527              clr R21
 000E                   .dbline 13
 000E           ; /****************************************************************************/
 000E 03C0              xjmp L6
 0010           L3:
 0010                   .dbline 14
 0010 F7DF              xcall _delay_1us
 0012           L4:
 0012                   .dbline 13
 0012 4F5F              subi R20,255  ; offset = 1
 0014 5F4F              sbci R21,255
 0016           L6:
 0016                   .dbline 13
 0016 4617              cp R20,R22
 0018 5707              cpc R21,R23
 001A D0F3              brlo L3
 001C                   .dbline -2
 001C           L2:
 001C 0E940000          xcall pop_gset2
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbsym r i 20 i
 0022                   .dbsym r n 22 i
 0022                   .dbend
 0022                   .dbfunc e delay_1ms _delay_1ms fV
 0022           ;              i -> R16,R17
                        .even
 0022           _delay_1ms::
 0022                   .dbline -1
 0022                   .dbline 18
 0022           ; /***************************全局变量声明*************************************/
 0022           ; uint vol16bit=0;
 0022           ; uchar test1[]=" AD7705TEST ";
 0022           ; uint vint=0;
 0022           ; float voltemp=0;
 0022                   .dbline 20
 0022 0027              clr R16
 0024 1127              clr R17
 0026 02C0              xjmp L11
 0028           L8:
 0028                   .dbline 20
 0028           L9:
 0028                   .dbline 20
 0028 0F5F              subi R16,255  ; offset = 1
 002A 1F4F              sbci R17,255
 002C           L11:
 002C                   .dbline 20
 002C           ; uchar flag=0;
 002C           ;  
 002C 0637              cpi R16,118
 002E E4E0              ldi R30,4
 0030 1E07              cpc R17,R30
 0032 D0F3              brlo L8
 0034                   .dbline -2
 0034           L7:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r i 16 i
 0036                   .dbend
 0036                   .dbfunc e delay_nms _delay_nms fV
 0036           ;              i -> R20,R21
 0036           ;              n -> R22,R23
                        .even
 0036           _delay_nms::
 0036 0E940000          xcall push_gset2
 003A B801              movw R22,R16
 003C                   .dbline -1
 003C                   .dbline 24
 003C           ; //void int0_isr(void);
 003C           ; /****************************************************************************/
 003C           ; //函数名:    ad7705()
 003C           ; //功能:      实现模数转换
 003C                   .dbline 25
 003C           ; //输入:      chan(通道)
 003C 4427              clr R20
 003E 5527              clr R21
 0040                   .dbline 26
 0040           ; //输出:      adc16(经ADC转换后的16位2进制数)
 0040 03C0              xjmp L16
 0042           L13:
 0042                   .dbline 27
 0042                   .dbline 28
 0042 EFDF              xcall _delay_1ms
 0044                   .dbline 29
 0044           L14:
 0044                   .dbline 26
 0044 4F5F              subi R20,255  ; offset = 1
 0046 5F4F              sbci R21,255
 0048           L16:
 0048                   .dbline 26
 0048 4617              cp R20,R22
 004A 5707              cpc R21,R23
 004C D0F3              brlo L13
 004E                   .dbline -2
 004E           L12:
 004E 0E940000          xcall pop_gset2
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r i 20 i
 0054                   .dbsym r n 22 i
 0054                   .dbend
 0054                   .dbfile D:\各种模块设计\模块程序集\ad7705/7705.h
 0054                   .dbfunc e init_adc7705 _init_adc7705 fV
 0054           ;              i -> R20
                        .even
 0054           _init_adc7705::
 0054 0E940000          xcall push_gset1
 0058                   .dbline -1
 0058                   .dbline 32
 0058           ; //备注:
 0058           ; /****************************************************************************/
 0058           ; //unsigned int ad7705(unsigned char chan)
 0058           ; //{ unsigned int adc16=0;
 0058           ;   //init_adc7705();
 0058           ;   //adc16=read_adc7705(0);
 0058                   .dbline 34
 0058           ;   //return(adc16);
 0058           ; //}
 0058 80916200          lds R24,98
 005C 8160              ori R24,1
 005E 80936200          sts 98,R24
 0062                   .dbline 35
 0062           ; /****************************************************************************/
 0062 80916200          lds R24,98
 0066 8260              ori R24,2
 0068 80936200          sts 98,R24
 006C                   .dbline 36
 006C           ; //函数名:    main(void)
 006C 4427              clr R20
 006E 0BC0              xjmp L21
 0070           L18:
 0070                   .dbline 37
 0070                   .dbline 37
 0070 80916200          lds R24,98
 0074 8E7F              andi R24,254
 0076 80936200          sts 98,R24
 007A                   .dbline 37
 007A 80916200          lds R24,98
 007E 8160              ori R24,1
 0080 80936200          sts 98,R24
 0084                   .dbline 37
 0084           L19:
 0084                   .dbline 36
 0084 4395              inc R20
 0086           L21:
 0086                   .dbline 36
 0086 4832              cpi R20,40
 0088 98F3              brlo L18
 008A                   .dbline 38
 008A           ; //功能:      主函数
 008A           ; //输入:      无
 008A 00E2              ldi R16,32
 008C 0CD0              xcall _write_adc7705
 008E                   .dbline 39
 008E           ; //输出:      无
 008E 06E0              ldi R16,6
 0090 0AD0              xcall _write_adc7705
 0092                   .dbline 40
 0092           ; //备注:
 0092 00E1              ldi R16,16
 0094 08D0              xcall _write_adc7705
 0096                   .dbline 41
 0096           ; /****************************************************************************/
 0096 04E4              ldi R16,68
 0098 06D0              xcall _write_adc7705
 009A                   .dbline 42
 009A           ; void main(void)
 009A 04E6              ldi R16,100
 009C 10E0              ldi R17,0
 009E CBDF              xcall _delay_nms
 00A0                   .dbline -2
 00A0           L17:
 00A0 0E940000          xcall pop_gset1
 00A4                   .dbline 0 ; func end
 00A4 0895              ret
 00A6                   .dbsym r i 20 c
 00A6                   .dbend
 00A6                   .dbfunc e write_adc7705 _write_adc7705 fV
 00A6           ;            cmd -> R20
 00A6           ;              i -> R22
 00A6           ;          token -> R10
 00A6           ;       cmd_data -> R22
                        .even
 00A6           _write_adc7705::
 00A6 0E940000          xcall push_gset3
 00AA 602F              mov R22,R16
 00AC                   .dbline -1
 00AC                   .dbline 52
 00AC           ; { 
 00AC           ;   uchar tongdao=0x00;
 00AC           ;   uchar key_vale;
 00AC           ;   
 00AC           ;   DDRF=0xF3;   
 00AC           ;   PORTF=0xFF;
 00AC           ;   DDRD=0xf7;  //PD0为输入,与键盘的所有行线连接,采用键盘中断查询法
 00AC           ;   MCUCR=0x30; //打开SE和SM1,允许sleep和power_down模式
 00AC           ;   EIMSK=0x01;  //允许外部中断INT0,低电平触发中断
 00AC           ;   LCD_init();
 00AC                   .dbline 54
 00AC           ;   LCD_DisplayString(1,1,test1);
 00AC           ;   
 00AC 80E8              ldi R24,128
 00AE A82E              mov R10,R24
 00B0                   .dbline 54
 00B0 462F              mov R20,R22
 00B2                   .dbline 55
 00B2           ;   while(1)
 00B2 80916200          lds R24,98
 00B6 8160              ori R24,1
 00B8 80936200          sts 98,R24
 00BC                   .dbline 56
 00BC           ;   { 
 00BC 6627              clr R22
 00BE 23C0              xjmp L26
 00C0           L23:
 00C0                   .dbline 57
 00C0           ;     CLI();
 00C0                   .dbline 58
 00C0           ;       SEI();
 00C0 80916200          lds R24,98
 00C4 8E7F              andi R24,254
 00C6 80936200          sts 98,R24
 00CA                   .dbline 59
 00CA           ;     asm("sleep"); //进入sleep模式
 00CA 02E0              ldi R16,2
 00CC 10E0              ldi R17,0
 00CE 9ADF              xcall _delay_nus
 00D0                   .dbline 60
 00D0           ;       
 00D0 242E              mov R2,R20
 00D2 2A20              and R2,R10
 00D4 31F0              breq L27
 00D6                   .dbline 60
 00D6 80916200          lds R24,98
 00DA 8260              ori R24,2
 00DC 80936200          sts 98,R24
 00E0 05C0              xjmp L28
 00E2           L27:
 00E2                   .dbline 61
 00E2           ;     if(flag=1)
 00E2 80916200          lds R24,98
 00E6 8D7F              andi R24,253
 00E8 80936200          sts 98,R24
 00EC           L28:
 00EC                   .dbline 62
 00EC 02E0              ldi R16,2
 00EE 10E0              ldi R17,0
 00F0 89DF              xcall _delay_nus
 00F2                   .dbline 63
 00F2 80916200          lds R24,98
 00F6 8160              ori R24,1
 00F8 80936200          sts 98,R24
 00FC                   .dbline 64
 00FC 05E0              ldi R16,5
 00FE 10E0              ldi R17,0
 0100 81DF              xcall _delay_nus
 0102                   .dbline 65
 0102 A694              lsr R10
 0104                   .dbline 66
 0104           L24:
 0104                   .dbline 56
 0104 6395              inc R22
 0106           L26:
 0106                   .dbline 56
 0106 6830              cpi R22,8
 0108 D8F2              brlo L23
 010A                   .dbline 67
 010A           ;      {
 010A           ;          key_vale=key_scay();
 010A           ;          
 010A           ;          if(key_vale==10)
 010A           ;          {
 010A           ;           vol16bit=ad7705(tongdao);
 010A 80916200          lds R24,98
 010E 8160              ori R24,1
 0110 80936200          sts 98,R24
 0114                   .dbline 67
 0114 80916200          lds R24,98
 0118 8260              ori R24,2
 011A 80936200          sts 98,R24
 011E                   .dbline -2
 011E           L22:
 011E 0E940000          xcall pop_gset3
 0122                   .dbline 0 ; func end
 0122 0895              ret
 0124                   .dbsym r cmd 20 c
 0124                   .dbsym r i 22 c
 0124                   .dbsym r token 10 c
 0124                   .dbsym r cmd_data 22 c
 0124                   .dbend
 0124                   .dbfunc e read_adc7705 _read_adc7705 fi
 0124           ;          token -> <dead>
 0124           ;              i -> R20
 0124           ;        ad16bit -> R22,R23
 0124           ;        channel -> R20
                        .even
 0124           _read_adc7705::
 0124 0E940000          xcall push_gset2
 0128 402F              mov R20,R16
 012A                   .dbline -1
 012A                   .dbline 77
 012A           ;           voltemp=(vol16bit/65535.0)*2500;
 012A           ;           vint=(int)voltemp;
 012A           ;           LCD_DisplayInt(2,5,vint); 
 012A           ;           delay_nms(1);
 012A           ;               } 
 012A           ;      }
 012A           ;   }
 012A           ;   
 012A           ; }   
 012A           ; 
 012A                   .dbline 80
 012A           ; 
 012A           ; //功能:键盘中断扫描程序,外部0中断
 012A           ; #pragma interrupt_handler int0_isr:2  
 012A 042F              mov R16,R20
 012C 0863              ori R16,56
 012E BBDF              xcall _write_adc7705
 0130           L30:
 0130                   .dbline 81
 0130                   .dbline 81
 0130                   .dbline 81
 0130           L31:
 0130                   .dbline 81
 0130           ; void int0_isr(void)

⌨️ 快捷键说明

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