📄 161212.lst
字号:
1 .file "161212.c"
2 .arch atmega8
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
69 .global com
71 com:
1:161212.c ****
2:161212.c **** /******************************************************************
3:161212.c **** 本程序只供学习使用,未经作者许可,不得用于其它任何用途
4:161212.c **** 我的邮箱:at89c58@163.com
5:161212.c ****
6:161212.c **** *******************************************************************/
7:161212.c **** //HD44780 1602 程序演示
8:161212.c ****
9:161212.c **** //单片机型号:ATMEGA8L-8PU
10:161212.c ****
11:161212.c **** //晶振:4M
12:161212.c ****
13:161212.c **** //程序没有加入忙判断
14:161212.c ****
15:161212.c **** //编译软件为winavr 200705
16:161212.c ****
17:161212.c **** #include<avr/io.h>
18:161212.c **** #include <util/delay.h>
19:161212.c **** #include <avr/portpins.h>
20:161212.c **** #include <compat/deprecated.h>
21:161212.c ****
22:161212.c **** #define uchar unsigned char
23:161212.c ****
24:161212.c **** #define LCD_E_0 cbi(PORTD,6)
25:161212.c ****
26:161212.c **** #define LCD_RW_0 cbi(PORTD,5)
27:161212.c ****
28:161212.c **** #define LCD_RS_0 cbi(PORTD,4)
29:161212.c ****
30:161212.c **** #define LCD_E_1 sbi(PORTD,6)
31:161212.c ****
32:161212.c **** #define LCD_RW_1 sbi(PORTD,5)
33:161212.c ****
34:161212.c **** #define LCD_RS_1 sbi(PORTD,4)
35:161212.c ****
36:161212.c **** void com(uchar init) //写指令
37:161212.c ****
38:161212.c **** {
72 end (size=0) */
74 .LM1:
75 cbi 50-0x20,4
39:161212.c ****
40:161212.c **** LCD_RS_0;
76 abn 68,0,41,.LM2-com
77 .LM2:
78 0000 9498 out 56-0x20,r24
41:161212.c **** PORTB=init;
79 B16:
80 .LBB17:
81 0002 88BB .LBB18:
82 .LBB19:
84 .Ltext1:
86 .LM3:
87 ldi r24,lo8(10000)
1:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** Copyright (c) 2007 Joerg Wunsch
3:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** All rights reserved.
4:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
5:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** Redistribution and use in source and binary forms, with or without
6:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** modification, are permitted provided that the following conditions are met:
7:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
8:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** * Redistributions of source code must retain the above copyright
9:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer.
10:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
11:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** * Redistributions in binary form must reproduce the above copyright
12:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer in
13:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** the documentation and/or other materials provided with the
14:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** distribution.
15:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
16:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** * Neither the name of the copyright holders nor the names of
17:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** contributors may be used to endorse or promote products derived
18:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** from this software without specific prior written permission.
19:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
20:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** POSSIBILITY OF SUCH DAMAGE. */
31:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
32:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1.2.2 2007/05/13 21:26:06 joerg_wunsch Exp $ */
33:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
34:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
35:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
36:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
37:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** #include <inttypes.h>
38:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
39:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** /** \file */
40:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
41:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** \code
42:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** #include <util/delay_basic.h>
43:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** \endcode
44:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
45:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** The functions in this header file implement simple delay loops
46:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** that perform a busy-waiting. They are typically used to
47:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** facilitate short delays in the program execution. They are
48:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** implemented as count-down loops with a well-known CPU cycle
49:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** count per loop iteration. As such, no other processing can
50:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** occur simultaneously. It should be kept in mind that the
51:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** functions described here do not disable interrupts.
52:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
53:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** In general, for long delays, the use of hardware timers is
54:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** much preferrable, as they free the CPU, and allow for
55:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** concurrent processing of other events while the timer is
56:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** running. However, in particular for very short delays, the
57:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** overhead of setting up a hardware timer is too much compared
58:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** to the overall delay time.
59:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
60:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** Two inline functions are provided for the actual delay algorithms.
61:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
62:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** */
63:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
64:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
65:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
66:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
67:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** #endif
68:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
69:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
70:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
71:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** Delay loop using an 8-bit counter \c __count, so up to 256
72:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** iterations are possible. (The value 256 would have to be passed
73:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** as 0.) The loop executes three CPU cycles per iteration, not
74:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** including the overhead the compiler needs to setup the counter
75:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** register.
76:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
77:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
78:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** can be achieved.
79:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** */
80:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** void
81:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
82:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** {
83:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** __asm__ volatile (
84:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** "1: dec %0" "\n\t"
85:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** "brne 1b"
86:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** : "=r" (__count)
87:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** : "0" (__count)
88:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** );
89:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** }
90:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
91:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
92:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
93:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
94:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** iterations are possible. (The value 65536 would have to be
95:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** passed as 0.) The loop executes four CPU cycles per iteration,
96:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** not including the overhead the compiler requires to setup the
97:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** counter register pair.
98:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h ****
99:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
100:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** milliseconds can be achieved.
101:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** */
102:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** void
103:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** _delay_loop_2(uint16_t __count)
104:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** {
105:c:/winavr-20070525/bin/../avr/include/util/delay_basic.h **** __asm__ volatile (
88 hi8(10000)
89 /* #APP */
90 0004 80E1 1: sbiw r24,1
91 0006 97E2 brne 1b
92 /* #NOAPP */
93 0008 0197 .LBE19:
94 000a 01F4 .LBE18:
95 .LBE17:
96 .LBE16:
98 .Ltext2:
100 .LM4:
101 sbi 50-0x20,6
42:161212.c **** _delay_ms(5);
43:161212.c **** LCD_E_1;
102 4,.LM5-com
103 .LM5:
104 000c 969A cbi 50-0x20,6
44:161212.c **** LCD_E_0;
105 epilogue: frame size=0 */
106 ret
107 000e 9698 /* epilogue end (size=1) */
108 /* function com size 11 (10) */
113 .Lscope0:
116 .global Dat
118 Dat:
120 .LM6:
121 /* prologue: frame size=0 */
45:161212.c ****
46:161212.c **** }
47:161212.c ****
48:161212.c ****
49:161212.c ****
50:161212.c **** void Dat(uchar dat) //写数据
51:161212.c ****
52:161212.c **** {
122 size=0) */
124 .LM7:
125 sbi 50-0x20,4
53:161212.c ****
54:161212.c **** LCD_RS_1;
126 ,36,0,0,Dat
128 0012 949A .global Dat
55:161212.c ****
56:161212.c **** PORTB=dat;
129 ype Dat, @function
130 Dat:
132 .LM6:
133 /* prologue: frame size=0 */
134 /* prologue end (size=0) */
136 .LM7:
137 sbi 50-0x20,4
139 .LM8:
140 0016 80E1 out 56-0x20,r24
141 0018 97E2 .LBB20:
142 .LBB21:
143 001a 0197 .LBB22:
144 001c 01F4 .LBB23:
146 .Ltext3:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -