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

📄 second.lst

📁 关于单片机的哈吉阿 吉阿 将阿吉阿吉阿吉阿吉阿吉阿
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0105) void lcd_write_data(unsigned char char_data)
(0106) {
(0107)  wait_enable();//等待LCD空闲
    00E4 D00A      RCALL	_wait_enable
(0108)  lcd_control_port|=lcd_RS;//RS=1
    00E5 9ADE      SBI	0x1B,6
(0109)  lcd_control_port&=~lcd_RW;//RW=0
    00E6 98DD      CBI	0x1B,5
(0110)  lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲
    00E7 98DC      CBI	0x1B,4
(0111)  NOP();
    00E8 0000      NOP
(0112)  lcd_control_port|=lcd_EN;//E=1
    00E9 9ADC      SBI	0x1B,4
(0113)  lcd_data_port=char_data;
    00EA BB48      OUT	0x18,R20
(0114)  lcd_control_port&=~lcd_EN;//重设E=0
    00EB 98DC      CBI	0x1B,4
(0115) }
    00EC 940E0155  CALL	pop_gset1
    00EE 9508      RET
(0116) 
(0117) //正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。
(0118) //检测忙信号,等待LCD空闲函数
(0119) void wait_enable(void)
(0120) {
(0121)  lcd_busy_ddr&=~busy;//设置busy口为输入
_wait_enable:
    00EF 98BF      CBI	0x17,7
(0122)  lcd_control_port&=~lcd_RS;//RS=0
    00F0 98DE      CBI	0x1B,6
(0123)  lcd_control_port|=lcd_RW;//RW=1
    00F1 9ADD      SBI	0x1B,5
(0124)  NOP();
    00F2 0000      NOP
(0125)  lcd_control_port|=lcd_EN;//E=1
    00F3 9ADC      SBI	0x1B,4
(0126)  while(lcd_busy_pin&busy);//等待LCD_DB7为0
    00F4 99B7      SBIC	0x16,7
    00F5 CFFE      RJMP	0x00F4
(0127)  lcd_control_port&=~lcd_EN;//重设E=0
    00F6 98DC      CBI	0x1B,4
(0128)  lcd_busy_ddr|=busy;//设置busy口为输出
    00F7 9ABF      SBI	0x17,7
(0129) }
    00F8 9508      RET
FILE: D:\mega16学习板资料\例程\m16\1602\second.c
(0001) //ICC-AVR application builder : 2006-12-22 20:34:51
(0002) // Target : M8
(0003) // Crystal: 6.0000Mhz
(0004) //1602占用了PB口作为数据口,PA6,PA5,PA4分别是RS,WR,E
(0005) //按纽采用循环检测方式工作,不采用中断方式.
(0006) 
(0007) 
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) #include "1602.h"
(0011) unsigned char led_buff[]="qian ru shi LM! ";
(0012) unsigned char str1[]="www.ourembed.com";
(0013) 
(0014) 
(0015) void timer1_init(void);
(0016) void init_devices(void);
(0017) unsigned char KeyPress(void);
(0018) void delay_ms(unsigned int time);
(0019) void StartCount(void);
(0020) void StopCount(void);
(0021) void Clear(void);
(0022) unsigned int hour=0,minute=0,second=0,ms=0;
(0023) unsigned char c_next=0,choose=0;
(0024) 
(0025) void port_init(void) 
(0026) {
(0027)  PORTB = 0xFF;
_port_init:
    00F9 EF8F      LDI	R24,0xFF
    00FA BB88      OUT	0x18,R24
(0028)  DDRB  = 0xFF;
    00FB BB87      OUT	0x17,R24
(0029)  PORTC = 0xFF; //m103 output only
    00FC BB85      OUT	0x15,R24
(0030)  DDRC  = 0xFF;
    00FD BB84      OUT	0x14,R24
(0031)  PORTD = 0xFF;
    00FE BB82      OUT	0x12,R24
(0032)  DDRD  = 0xFF;
    00FF BB81      OUT	0x11,R24
(0033) }
    0100 9508      RET
(0034) 
(0035) //TIMER1 initialisation - prescale:8
(0036) // WGM: 0) Normal, TOP=0xFFFF
(0037) // desired value: 1mSec
(0038) // actual value:  1.000mSec (0.0%)
(0039) void timer1_init(void)
(0040) {
(0041)  TCCR1B = 0x00; //stop
_timer1_init:
    0101 2422      CLR	R2
    0102 BC2E      OUT	0x2E,R2
(0042)  TCNT1H = 0x63; //setup
    0103 E683      LDI	R24,0x63
    0104 BD8D      OUT	0x2D,R24
(0043)  TCNT1L = 0xc0;
    0105 EC80      LDI	R24,0xC0
    0106 BD8C      OUT	0x2C,R24
(0044)  OCR1AH = 0x17;
    0107 E187      LDI	R24,0x17
    0108 BD8B      OUT	0x2B,R24
(0045)  OCR1AL = 0x70;
    0109 E780      LDI	R24,0x70
    010A BD8A      OUT	0x2A,R24
(0046)  OCR1BH = 0x17;
    010B E187      LDI	R24,0x17
    010C BD89      OUT	0x29,R24
(0047)  OCR1BL = 0x70;
    010D E780      LDI	R24,0x70
    010E BD88      OUT	0x28,R24
(0048)  ICR1H  = 0x17;
    010F E187      LDI	R24,0x17
    0110 BD87      OUT	0x27,R24
(0049)  ICR1L  = 0x70;
    0111 E780      LDI	R24,0x70
    0112 BD86      OUT	0x26,R24
(0050)  TCCR1A = 0x00;
    0113 BC2F      OUT	0x2F,R2
(0051)  TCCR1B = 0x00; //start Timer
    0114 BC2E      OUT	0x2E,R2
(0052) }
    0115 9508      RET
_timer1_ovf_isr:
    0116 938A      ST	R24,-Y
    0117 B78F      IN	R24,0x3F
    0118 938A      ST	R24,-Y
(0053) 
(0054) #pragma interrupt_handler timer1_ovf_isr:9
(0055) void timer1_ovf_isr(void)
(0056) {
(0057)  //TIMER1 has overflowed
(0058)  TCNT1H = 0x63; //reload counter high value
    0119 E683      LDI	R24,0x63
    011A BD8D      OUT	0x2D,R24
(0059)  TCNT1L = 0xc0; //reload counter low value
    011B EC80      LDI	R24,0xC0
    011C BD8C      OUT	0x2C,R24
(0060) }
    011D 9189      LD	R24,Y+
    011E BF8F      OUT	0x3F,R24
    011F 9189      LD	R24,Y+
    0120 9518      RETI
(0061) 
(0062) //call this routine to initialise all peripherals
(0063) void init_devices(void)
(0064) {
(0065)  //stop errant interrupts until set up
(0066)  CLI(); //disable all interrupts
_init_devices:
    0121 94F8      BCLR	7
(0067)  port_init();
    0122 DFD6      RCALL	_port_init
(0068)  timer1_init();
    0123 DFDD      RCALL	_timer1_init
(0069) 
(0070)  MCUCR = 0x0A;
    0124 E08A      LDI	R24,0xA
    0125 BF85      OUT	0x35,R24
(0071)  GICR  = 0x00;
    0126 2422      CLR	R2
    0127 BE2B      OUT	0x3B,R2
(0072)  TIMSK = 0x04; //timer interrupt sources
    0128 E084      LDI	R24,4
    0129 BF89      OUT	0x39,R24
(0073)  SEI(); //re-enable interrupts
    012A 9478      BSET	7
(0074)  //all peripherals are now initialised
(0075) }
    012B 9508      RET
(0076) 
(0077) //
(0078) void main(void)
(0079) {
(0080)  init_devices();
_main:
    012C DFF4      RCALL	_init_devices
(0081)  lcd_init();
    012D DF38      RCALL	_lcd_init
(0082)  //insert your functional code here...
(0083)  display_a_string(0,led_buff);
    012E E620      LDI	R18,0x60
    012F E030      LDI	R19,0
    0130 2700      CLR	R16
    0131 DF96      RCALL	_display_a_string
(0084)  display_a_string(1,str1);
    0132 E721      LDI	R18,0x71
    0133 E030      LDI	R19,0
    0134 E001      LDI	R16,1
(0085)  
(0086) 
(0087) }
    0135 CF92      RJMP	_display_a_string
_delay_ms:
  j                    --> R20
  i                    --> R22
  time                 --> R16
    0136 940E0169  CALL	push_gset2
(0088) 
(0089) //延时
(0090) void delay_ms(unsigned int time)
(0091) { unsigned int i,j;
(0092)   
(0093)   for(j=0;j<time;j++)
    0138 2744      CLR	R20
    0139 2755      CLR	R21
    013A C00B      RJMP	0x0146
(0094)   { for(i=0;i<1000;i++)
    013B 2766      CLR	R22
    013C 2777      CLR	R23
    013D C002      RJMP	0x0140
    013E 5F6F      SUBI	R22,0xFF
    013F 4F7F      SBCI	R23,0xFF
    0140 3E68      CPI	R22,0xE8
    0141 E0E3      LDI	R30,3
    0142 077E      CPC	R23,R30
    0143 F3D0      BCS	0x013E
    0144 5F4F      SUBI	R20,0xFF
    0145 4F5F      SBCI	R21,0xFF
    0146 1740      CP	R20,R16
    0147 0751      CPC	R21,R17
    0148 F390      BCS	0x013B
(0095)      time=time;
(0096)   }
(0097) }
FILE: <library>
    0149 940E014C  CALL	pop_gset2
    014B 9508      RET
pop_gset2:
    014C E0E2      LDI	R30,2
    014D 940C0156  JMP	pop
pop_gset3:
    014F E0E4      LDI	R30,4
    0150 940C0156  JMP	pop
push_gset1:
    0152 935A      ST	R21,-Y
    0153 934A      ST	R20,-Y
    0154 9508      RET
pop_gset1:
    0155 E0E1      LDI	R30,1
pop:
    0156 9149      LD	R20,Y+
    0157 9159      LD	R21,Y+
    0158 FDE0      SBRC	R30,0
    0159 9508      RET
    015A 9169      LD	R22,Y+
    015B 9179      LD	R23,Y+
    015C FDE1      SBRC	R30,1
    015D 9508      RET
    015E 90A9      LD	R10,Y+
    015F 90B9      LD	R11,Y+
    0160 FDE2      SBRC	R30,2
    0161 9508      RET
    0162 90C9      LD	R12,Y+
    0163 90D9      LD	R13,Y+
    0164 FDE3      SBRC	R30,3
    0165 9508      RET
    0166 90E9      LD	R14,Y+
    0167 90F9      LD	R15,Y+
    0168 9508      RET
push_gset2:
    0169 937A      ST	R23,-Y
    016A 936A      ST	R22,-Y
    016B 940C0152  JMP	push_gset1
push_gset3:
    016D 92BA      ST	R11,-Y
    016E 92AA      ST	R10,-Y
    016F 940C0169  JMP	push_gset2

⌨️ 快捷键说明

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