Proteus. Proteus (. 2.3) , , , PortG, 7- . .
2.3. Assembler
1.
, , . , , .
120 .
. 2.3. Proteus
, , . , , .
:
- [:] [] []
- [:] [] []
-
-
:
; []
. (;) . , .
label:.EQU var1=100 | ; var1 100 () |
.EQU var2=200 | ; var2 200 |
; |
, , , .
2.
BYTE . , BYTE . , . (. CSEG DSEG). .
:
:.BYTE
:
.DSEG | |
var1:.BYTE 1 | ; 1 var1 |
table:.BYTE tab_size | ; tab_size |
.CSEG | |
ldi r30,low(var1) | ; Z |
ldi r31,high(var1) | ; Z |
ld r1,Z | ; VAR1 1 |
3.
CSEG . , . . , , . ORG . CSEG .
:
.CSEG
|
|
:
.DSEG | |
vartab:.BYTE 4 | ; 4 |
.CSEG | ; |
const:.DW 2 | ; 0x0002 ; |
mov r1,r0 | ; |
4.
DEF . . . .
:
.DEF _ =
:
.DEF temp=R16 | |
.DEF ior=R0 | |
.CSEG | |
ldi temp,0xf0 | ; 0xf0 temp (R16) |
in ior,0x3f | ; SREG ior (R0) |
eortemp,ior | ; temp ior ; |
5.
DSEG . , . BYTE . . ORG . .
:
.DSEG
:
.DSEG | ; |
var1:.BYTE 1 | ; 1 var1 |
table:.BYTE tab_size | ; tab_size . |
.CSEG | |
ldi r30,low(var1) | ; Z |
ldi r31,high(var1) | ; Z |
ld r1,Z | ; var1 r1 |
6.
EQU . . , , .
:
.EQU =
:
.EQU io_offset = 0x23
.EQU porta = io_offset + 2
.SEG | ; |
clr r2 | ; r2 |
out porta,r2 | ; A |
7.
INCLUDE, , , EXIT, , INCLUDE. INCLUDE.
:
.INCLUDE "_"
:
; iodefs.asm:
.EQU sreg = 0x3f;
.EQU sphigh = 0x3e;
.EQU splow = 0x3d;
; incdemo.asm
.INCLUDE iodefs.asm;
in r0,sreg;
2.4.
1. ?
2. ?
3. ?
4. ?
5. SREG.
6. ?
|
|
7. ?
8. .
9. ?
10. ?
11. , .
12. ?
13. ?
2.5.
1. R16 15, 25 . 020h , 021h .
2. 4836 232. 2. 025h , 030h .
3. 0h 0Eh. Ȼ R0 09h.
4. 236 59. 23, . .
5. PORTB 044h. .
6. R17 023h. R17+SREG. , , .
7. 9701 32. 4. PORTC. .
8. (81+64)*(11225) OR 10011010b, .
9. R18 112, 18 . 020h , 021h .
10. 4801 209. PORTD. .
11. R19 0h. 8*R19. 4, . , , , 0238h.
12. 128h, 129h, 12ah , , 080h.
13. 7h 01h 7, NOT (0101001b OR 74).
14. (72+56)*(12215) XOR 01010011b, .
15. 012h, 033h, 0Ah. 22, . 1, .
: , , , .
3
,
. , , , .
:
;
;
AtmelAVRStudio;
-31.100;
;
.
3.1.
, - . .
|
|
, , , UDR , :
.CSEG Start: M1: M2: M3: | LDI R16,Low(RAMEND) OUT SPL,R16 LDI R16,High(RAMEND) OUT SPH,R16 .equ Byte = 50 .equ Delay = 20 LDI R16,Byte OUT UDR,R16 LDI R17,Delay DECR17 NOP BRNEM1 OUTUDR,R16 LDI R17,Delay DEC R17 NOP BRNE M2 OUT UDR,R16 LDI R17,Delay DEC R17 NOP BRNEM3 RJMP Start | ; ; ; ; -; ; 1 ; ; ; 0? ; 0 ; ; ; ; |
.
M2: | LDI R17,Delay DEC R17 NOP BRNE M2 |
CALL (ICALL, RCALL, CALL) RET.
:
.CSEG Start: Wait: M1: | LDI R16,Low(RAMEND) OUT SPL,R16 LDI R16,High(RAMEND) OUT SPH,R16 .equ Byte = 50 .equ Delay = 20 LDI R16,Byte OUT UDR,R16 RCALL Wait OUT UDR,R16 RCALL Wait OUT UDR,R16 RCALL Wait OUT UDR,R16 RCALL Wait RJMP Start LDI R17,Delay DEC R17 NOP BRNE M1 RET | ; ; ; ; |
, . , .
, , , .
3.2.
. . 3.1. . , .
(RESET) , INT0 INT0. FLASH- IVSEL (MCUCR). - BOOTRST.
I , . 1 I . . I RETI.
. , . . 1 . , , .
|
|
, , , .
. . , . AVR- .
, . .
CLI . CLI, CLI.
3.1
$0000 | RESET | , , , JTAG- | |
$0002 | INT0 | 0 | |
$0004 | INT1 | 1 | |
$0006 | INT2 | 2 | |
$0008 | INT3 | 3 | |
$000A | INT4 | 4 | |
$000C | INT5 | 5 | |
$000E | INT6 | 6 | |
$0010 | INT7 | 7 | |
$0012 | TIMER2 COMP | - 2 | |
$0014 | TIMER2 OVF | - 2 | |
$0016 | TIMER1 CAPT | - 1 | |
$0018 | TIMER1 COMPA | - 1 | |
$001A | TIMER1 COMPB | - 1 | |
$001C | TIMER1 OVF | - 1 | |
$001E | TIMER0 COMP | - 0 |
. 3.1
$0020 | TIMER0 OVF | - 0 | |
$0022 | SPI, STC | SPI | |
$0024 | USART0, RX | 0 | |
$0026 | USART0, UDRE | 0 | |
$0028 | USART0, TX | 0 | |
$002A | ADC | ||
$002C | EE READY | ||
$002E | ANALOG COMP | ||
$0030 | TIMER1 COMPC | - 1 | |
$0032 | TIMER3 CAPT | 3 | |
$0034 | TIMER3 COMPA | - 3 | |
$0036 | TIMER3 COMPB | - 3 | |
$0038 | TIMER3 COMPC | - 3 | |
$003A | TIMER3 OVF | 3 | |
$003C | USART1, RX | 1 | |
$003E | USART1, UDRE | 1 | |
$0040 | USART1, TX | 1 | |
$0042 | TWI | 2- | |
$0044 | SPM READY |
3.3.
4 . . 4 . , , 3 . , 1 , . , 4 . .
|
|
4 . 2- , I SREG.
3.4.
, R16, R17, R18 PE6 (INT6). , , . 3.23.5.
3.2
EIMSK
INT7 | INT6 | INT5 | INT4 | INT3 | INT2 | INT1 | INT0 | |
/ | / | / | / | / | / | / | / | / |
INT0INT7 I SREG 1, . EICRA EICRB , : , . , . .
3.3
EIMSK
TICIE3 | OCIE3A | OCIE3B | TOIE3 | OCIE3C | TOIE3C | |||
/ | / | / | / | / | / | / | ||
3.4
- EICRB
ICS71 | ICS70 | ICS61 | ICS60 | ICS51 | ICS50 | ICS41 | ICS40 | |
/ | / | / | / | / | / | / | / | / |
74 INT7INT4, I SREG EIMSK. , , . 3.5. INT7INT4 . , , , , . . , , XTAL, XTAL. , , , . , , .
3.5
ISCN1 | ISCN0 | |
INTn | ||
INTn | ||
, INTn, | ||
, INTn, |
.include "m128def.inc"
.dseg
.org $0100
.cseg
.org $0000
jmp Init
.org $000e ; PE6 (INT6)
jmp int_666
Init:
ldi r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
;
ldi r16,0b00100000
out EICRB,r16
ldi r16,0b01000000 ;
out EIMSK,r16
clr r16
cbi ddre,6
sei
gogogo:
nop
nop
nop
nop
nop
jmp gogogo
int_666:
ldi r16,1
ldi r17,1
ldi r18,1
reti
6- PINE (. 3.1).
. 3.1. I/O View
3.5.
1. .
2. , ?
3. .
4. CALL RCALL.
5. , ?
6. .
7. ?
8. .
3.6.
1. R16 73521. 3. .
2. R18 48411. 3. .
3. R20 76758. 6. .
4. R22 4716. 6. .
5. R17 95123. 7. .
6. - PE4 24 41, 100.
7. - PE4 27 38, 56.
8. PE6 R17, 2.
9. PD1 R18, 2.
10. - 0 100 R16.
11. - 0 255 R21.
12. PE5 - 0.
13. PD3 - 0.
14. PE7 1.
15. PD0 1.
: , , , .
4
. , , .
:
;
;
.
:
;
;
Atmel AVRStudio;
-31.100;
;
.
.
4.1.
7- (. 4.1).
. 4.1. 7-
. . , . , -31.100 (. 4.2).
. 4.2. 7- :
;
: .
(. 4.3). - (R1R3) . (DC1DC2). , .
. 4.3.
(RD) (. 4.4). . , . , , . 7- , , , , , , .
. 4.4.
4.2.
2 .
DD2 159437 (74ACT574) . 8‑ PA . PC.3. VT1VT8, DD3 HC138. PC.0 PC.2.
-31.100 . CS0CS7. DD4 74HC138 (15647). PB.0, PB.4 PB.5. - 74HC595 LC ( ), CS2. ( SW1SW8) DD13 HCT165 (55649). PB.3 , PB.1 .
4.3.
.include "m128def.inc"
.equ Sgm_A = 0b01111111
.equ Sgm_B = 0b10111111
.equ Sgm_D = 0b11011111
.equ Sgm_E = 0b11101111
.equ Sgm_F = 0b11110111
.equ Sgm_C = 0b11111011
.equ Sgm_H = 0b11111101
.equ Sgm_G = 0b11111110
.cseg
.org 0
jmp INIT
.equ SymbolB = (Sgm_A&Sgm_C&Sgm_D&Sgm_E&Sgm_F&Sgm_G)
.equ SymbolS = (Sgm_A&Sgm_E&Sgm_F)
.equ SymbolU = (Sgm_B&Sgm_C&Sgm_D&Sgm_F&Sgm_G)
.equ SymbolI = (Sgm_B&Sgm_C&Sgm_D&Sgm_E&Sgm_F)
.equ SymbolR = (Sgm_A&Sgm_B&Sgm_E&Sgm_F&Sgm_G)
String:.DB ;
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,SymbolR,SymbolI,SymbolU,SymbolS,SymbolB,0xFF,0xFF,0xff,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xff,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xff,0xFF,0xFF,0xFF,0xFF,0xFF
INIT: ldi R16,0xFF out ddrA,R16 | ; |
ldi R16,0b00001111
out ddrC,R16 ;
; -
clr R17
clr R18
clr r19
clr r20
clr r25
clr r24
clr r23
clr r22
clr r21
ldi R28,low(String) ;
ldi R29,high(String)
lsl R28
rol R29
ldi r20,0x1f ;
add r28,r20
Start:
out portC,R17 ;
mov R30,R28 ; Z
mov R31,R29
add R30,R17
adc R31,R18
lpm R2,Z ; Z R2
out portA,R2 ;
cbi portC,3 ;
;
sbi portC,3
dec R19 ;
brne PC-1
ldi R16,0xFF ;
out portA,R16
cbi portC,3
sbi portC,3
inc R17 ;
andi R17,7 ; ( )
dec r25 ;
brne pc-1
dec r24
brne pc-1
dec r23
brne pc-1
dec r22
brne pc-1
dec r21
brne start
dec r28 ;
dec r20 ;
brne start ;
;
ldi r20,0x1f ;
add r28,r20 ;
jmp start ;
Proteus . 4.5.
. 4.5. Proteus
4.4.
1. ?
2. .
3. .
4. 7‑ 31.100?
5. 7‑ ?
6. 7‑ ?
7. ?
4.5.
-31.100, 7- , :
1. 0h Fh -.
2. Fh 0h -.
3. 0h Fh -.
4. Fh 0h -.
5. BSUIR-xxxxxx, xxxxxx -.
6. BSUIR-xxxxxx, xxxxxx -.
7. BSUIR-xxxxxx, xxxxxx .. -.
8. BSUIR-xxxxxx, xxxxxx .. -.
9. π -.
10. -.
11. 2 5- -.
12. , 2 -.
13. , 2 -.
14. 10 -.
15. 10 -.
: , , , .
5
. (), , .
5.1.
, , . . , . (), . , (. 5.1).
. 5.1.
, , . , (. 5.2). .
. 5.2.
. . (. 5.3). , , . . , . , .
. 5.3.
. () , . , , . , . , . , . , , . . , .. , , , .
() , , . , . , .
5.2.
( ) ( ). , 90. , : , , , 90, , , , (. 5.4).
. 5.4.
, . , , . , (. 5.5).
. 5.5.
, . ( ). .
5.3.
( ) . , , , . (). 90 . , .
, , , , . ( ).
, . . .
5.4.
( ) , , . , , .
. , . , .
5.5.
, , , . , . 0 9 . 16- , ( , , ). , . . (. 5.6) .
. 5.6. :
7-; 16-; 5×7
50 20 C, 10 . 10 , . .
5.6. SC-1602 BULT
SC-1602 BULT () 2 16 . . 5.7, . 5.1.
. 5.7. SC-1602 BULT
5.1
SC-1602 BULT
VCC | ||
GND | ||
Contrast | ||
RS | ("1" , "0" ) |
. 5.1
R/W | ("1" , "0" ) | |
E | / | |
DB0DB7 | 714 | 0 7 |
SC-1602 BULT:
5×7 ;
HD44780 ;
5 .
. 5.8, . 5.9.
. 5.8. SC-1602 BULT
:
;
();
() ( . 8- . 192 );
( );
;
() ( );
.
. 5.9.
/ 4- 8- . 4- . . 4- . 5.10. . 5.11.
. 5.10.
. 5.11.
5.7.
-31.100 (. 5.12) . CS0CS7. DD4 74HC138 (15647). PB.0, PB.4 PB.5.
. 5.12.
( SW1SW8) DD13 HCT165 (55649). PB.3 , PB.1 .
PF.0PF.3, PE.2, PD.5 PD.7 .
5.8.
1. ?
2. .
3. .
4. .
5. SC-1602 BULT ?
6. SC-1602 BULT 4- .
7. / ?
8. ?
5.9.
-31.100, () :
1. Ȼ R20, 15h, R21, AFh.
2. Ȼ R20, EBh, R21, 3Fh.
3. -Ż R20, D0h, R21, AAh.
4. -Ż R20, 56h, R21, 6Dh.
5. AFh, .
6. 231, .
7. 01111011b, 16- .
8. 11110001b, 16- .
9. , .
10. , .
11. , .
12. , 20, 4F, 23 FF .
13. , 20, 2D, 2B 2A .
14. , .
15. , .
5.10.
-31.100, ѻ 2014 .
. , lcd_print_symbol, lcd_1st_line lcd_2nd_line .
include "m128def.inc"
.cseg
.org 0000
jmp Init
Init:
ldi R16,0x00 ; , 0400
out SPL,R16 ;
ldi R17,0x04
out SPH,R17 ;
;
sbi DDRD,5 ; R/W
sbi DDRD,7 ; RS
sbi DDRE,2 ; E
ldi R16,0b00001111 ; DB7DB4
sts DDRF,R16
cbi PortD,5; R/W = 0 (Write)
;
clr r13
clr r14
dec R13
brne PC-1
dec R14
brne PC-3
cbi PortD,7 ;RS = 0
ldi R16,0b0011 ; DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 1
sts PortF,R16 ;
sbi PortE,2 ;
clr r13 ;
dec r13 ;
brne pc-1
cbi PortE,2 ;
;
dec R13
brne PC-1
dec R14
brne PC-3
ldi R16,0b0011 ; DB7=0,DB6=0,DB5=1.DB4=1
sts PortF,R16
sbi PortE,2 ;
;
call delay
cbi PortE,2 ;
call delay
ldi R16,0b0011 ; DB7 = 0,DB6 = 0,DB 5= 1, DB4=1
sts PortF,R16
sbi PortE,2
;
call delay
cbi PortE,2
ldi R16,0b0010 ; 4- :
;DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0
sts PortF,R16 ;
sbi PortE,2 ;
;
call delay
cbi PortE,2 ;
ldi R16,0b0010 ; 4-
;DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
; 5 7
ldi R16,0b1000 ;N = 1, F = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;
ldi R16,0b0000 ;DB7 = 0, DB6 = 0, DB5 = 0, DB4 =0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b1000 ; D = 0, C = 0, B = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;
ldi R16,0b0000
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b0110 ; I/D = 1, S = 0
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;
ldi R16,0b0000
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
ldi R16,0b1111 ; D = 1, C = 1, B = 1
sts PortF,R16
sbi PortE,2
call delay
cbi PortE,2
;
start:
call lcd_1st_line ;
ldi r20,0x20
call lcd_print_symbol ; " " 0x20
ldi r20,0x20 ; " " 0x20
call lcd_print_symbol
ldi r20,0xA0 ; "" 0xA0
call lcd_print_symbol
ldi r20,0xA1 ; "" 0xA1
call lcd_print_symbol
ldi r20,0xA9 ; "" 0xA9
call lcd_print_symbol
ldi r20,0xA5 ; "" 0xA5
call lcd_print_symbol
ldi r20,0x50 ; "" 0x50
call lcd_print_symbol
ldi r20,0x20 ; " " 0x20
call lcd_print_symbol
ldi r20,0x2D ; "-" 0x 2D
call lcd_print_symbol
ldi r20,0x20 ; " " 0x20
call lcd_print_symbol
ldi r20,0xA8 ; "" 0xA8
call lcd_print_symbol
ldi r20,0xA5 ; "" 0xA5
call lcd_print_symbol
ldi r20,0x4B ; "" 0