G
gogo2520
Guest
Ahoj
Byl jsem studoval různé části programu v simulátoru a na projektu palubě.Narazil jsem na něco, co nechápu.I'll post kód pak vysvětlit problém
Kód:
; Timer1-s1.asm FOR SIMULATOR
, Program na test timer1LIST P = 16F628a; říct, assembler, co čip jsme pomocí
include "P16F628a.inc", zahrnují výchozí pro čip
__config 0x3D18; __config _PWRTE_ON & _LVP_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFForg 0x0000; org soupravy původu, 0x0000 pro 16F628,MOVLW 0x07
MOVWF CMCON; zase komparátory off (udělat to jako 16F84)W_TEMP všeo 0x70
STATUS_TEMP všeo 0x71Cblock 0x20
STUFF
count1
endc
goto hlavní
org 0x04
goto dosomething;;;;; SETUP TIMER1 ;;;;;;;;
INT
CLRF T1CON, Stop Timer1, vnitřní hodiny Source,
CLRF TMR1H, jasná Timer1 Vysoké byte registru
CLRF TMR1L, jasná Timer1 Low byte registru
clrf count1
MOVLW 0xFD
MOVWF TMR1H, na krátkou dobuCLRF INTCON; Zakázat přerušení
BSF STATUS, Rp0; Bank1BSF T1CON, TMR1ON; umožnit timer1
banksel PIE1; umožní přerušení
BSF PIE1, TMR1IE; timer1 přetečení přerušení umožňují;
banksel INTCON;
BSF INTCON, PEIE, periferní přerušení umožňujíBSF INTCON, GIE, globální přerušení umožňují
MOVLW 0x0D; vnitřní hodiny zdroj s 1:01 prescaler
MOVWF T1CON, Timer1 je zastaven a T1 OSC je zakázán
BSF T1CON, TMR1ON, Timer1 začne přírůstku
retlw 0x00main;
BANKSEL TRISA
MOVLW 0x00
MOVWF TRISA
MOVLW 0xF0
MOVWF TRISBBANKSEL PORTA
MOVLW 0x00
MOVWF PORTA, všechny porty výstupní
MOVLW 0xF0
MOVWF PORTB, 0 - 3 výstupy, 4 - 7 vstupůvolání INT, při čekání na Timer1
goto Start
; 8888888888888888 PŘIDANÉ ČÁST
Začátek
LOOP
BTFSS PORTB, 4; stisknete tlačítko
CALL LED1, ne pak přeskočit
BTFSS PORTB, 5; stisknete tlačítko
CALL LED2, ne pak přeskočit
BTFSS PORTB, 6, stisknete tlačítko
CALL LED3, ne pak přeskočit
BTFSS PORTB, 7, stisknete tlačítko
CALL LED4, ne pak přeskočit
GOTO LOOP; test tlačítek znovuLED1
BTFSC PORTB, 4, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 0; ano zapnutí LED
T1 BTFSS PORTB a 4, zkontrolujte znovu
GOTO T1, tlačítko stále tlačil test znovu
BCF PORTB, 0; tlačítko realeased vypnout LED
Návrat; vrátit k volání
LED2
BTFSC PORTB, 5, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 1; ano zapnutí LED
T2 BTFSS PORTB, 5, zkontrolujte znovu
GOTO T2, tlačítko stále tlačil test znovu
BCF PORTB, 1; tlačítko realeased vypnout LED
Návrat; vrátit k volání
LED3
BTFSC PORTB, 6, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 2, ano zapnutí LED
T3 BTFSS PORTB, 6, zkontrolujte znovu
GOTO T3, tlačítko stále tlačil test znovu
BCF PORTB, 2; tlačítko realeased vypnout LED
Návrat; vrátit k voláníLED4
BTFSC PORTB, 7, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 3, ano, zase o LED
T4 BTFSS PORTB, 7, zkontrolujte znovu
GOTO T4, tlačítko stále tlačil test znovu
BCF PORTB, 3; tlačítko realeased vypnout LED
Návrat; vrátit k volání; 888888888888888888888 s přidanou ČÁSTdosomething
MOVWF W_TEMP Kopírovat W k dočasnému Registrace
, Bez ohledu na běžných bankovních
SWAPF STATUS, W; Vyměnit STATUS křupky a místo
; Do registru W
MOVWF STATUS_TEMP, Uložit Status registru Dočasné
; V Bank0
;:
;: (Interrupt Service rutinní (ISR))
incf count1, 1
;:
SWAPF STATUS_TEMP, W, odkládací původního stavu registru hodnotu
; Do W (obnoví původní banka)
MOVWF STATUS; Obnovit stav rejstříku od
; W registrovat
SWAPF W_TEMP, F, odkládací W_Temp křupky a zpět
; Hodnotu W_Temp
SWAPF W_TEMP, W, odkládací W_Temp k W k obnovení původního
; W hodnoty bez ovlivnění STATUS; RESET přerušit
NOP; pro simulátor zlom
BCF PIR1, TMR1IF
MOVLW 0xFD
MOVWF TMR1H
BSF T1CON, TMR1ON, Timer1 začne přírůstku
retfie;************************************************* *******
konec, musí dát konec pro efekt kompilátor dosn't program
Byl jsem studoval různé části programu v simulátoru a na projektu palubě.Narazil jsem na něco, co nechápu.I'll post kód pak vysvětlit problém
Kód:
; Timer1-s1.asm FOR SIMULATOR
, Program na test timer1LIST P = 16F628a; říct, assembler, co čip jsme pomocí
include "P16F628a.inc", zahrnují výchozí pro čip
__config 0x3D18; __config _PWRTE_ON & _LVP_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFForg 0x0000; org soupravy původu, 0x0000 pro 16F628,MOVLW 0x07
MOVWF CMCON; zase komparátory off (udělat to jako 16F84)W_TEMP všeo 0x70
STATUS_TEMP všeo 0x71Cblock 0x20
STUFF
count1
endc
goto hlavní
org 0x04
goto dosomething;;;;; SETUP TIMER1 ;;;;;;;;
INT
CLRF T1CON, Stop Timer1, vnitřní hodiny Source,
CLRF TMR1H, jasná Timer1 Vysoké byte registru
CLRF TMR1L, jasná Timer1 Low byte registru
clrf count1
MOVLW 0xFD
MOVWF TMR1H, na krátkou dobuCLRF INTCON; Zakázat přerušení
BSF STATUS, Rp0; Bank1BSF T1CON, TMR1ON; umožnit timer1
banksel PIE1; umožní přerušení
BSF PIE1, TMR1IE; timer1 přetečení přerušení umožňují;
banksel INTCON;
BSF INTCON, PEIE, periferní přerušení umožňujíBSF INTCON, GIE, globální přerušení umožňují
MOVLW 0x0D; vnitřní hodiny zdroj s 1:01 prescaler
MOVWF T1CON, Timer1 je zastaven a T1 OSC je zakázán
BSF T1CON, TMR1ON, Timer1 začne přírůstku
retlw 0x00main;
BANKSEL TRISA
MOVLW 0x00
MOVWF TRISA
MOVLW 0xF0
MOVWF TRISBBANKSEL PORTA
MOVLW 0x00
MOVWF PORTA, všechny porty výstupní
MOVLW 0xF0
MOVWF PORTB, 0 - 3 výstupy, 4 - 7 vstupůvolání INT, při čekání na Timer1
goto Start
; 8888888888888888 PŘIDANÉ ČÁST
Začátek
LOOP
BTFSS PORTB, 4; stisknete tlačítko
CALL LED1, ne pak přeskočit
BTFSS PORTB, 5; stisknete tlačítko
CALL LED2, ne pak přeskočit
BTFSS PORTB, 6, stisknete tlačítko
CALL LED3, ne pak přeskočit
BTFSS PORTB, 7, stisknete tlačítko
CALL LED4, ne pak přeskočit
GOTO LOOP; test tlačítek znovuLED1
BTFSC PORTB, 4, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 0; ano zapnutí LED
T1 BTFSS PORTB a 4, zkontrolujte znovu
GOTO T1, tlačítko stále tlačil test znovu
BCF PORTB, 0; tlačítko realeased vypnout LED
Návrat; vrátit k volání
LED2
BTFSC PORTB, 5, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 1; ano zapnutí LED
T2 BTFSS PORTB, 5, zkontrolujte znovu
GOTO T2, tlačítko stále tlačil test znovu
BCF PORTB, 1; tlačítko realeased vypnout LED
Návrat; vrátit k volání
LED3
BTFSC PORTB, 6, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 2, ano zapnutí LED
T3 BTFSS PORTB, 6, zkontrolujte znovu
GOTO T3, tlačítko stále tlačil test znovu
BCF PORTB, 2; tlačítko realeased vypnout LED
Návrat; vrátit k voláníLED4
BTFSC PORTB, 7, zkontrolujte znovu
Návrat; ne zpátky
BSF PORTB, 3, ano, zase o LED
T4 BTFSS PORTB, 7, zkontrolujte znovu
GOTO T4, tlačítko stále tlačil test znovu
BCF PORTB, 3; tlačítko realeased vypnout LED
Návrat; vrátit k volání; 888888888888888888888 s přidanou ČÁSTdosomething
MOVWF W_TEMP Kopírovat W k dočasnému Registrace
, Bez ohledu na běžných bankovních
SWAPF STATUS, W; Vyměnit STATUS křupky a místo
; Do registru W
MOVWF STATUS_TEMP, Uložit Status registru Dočasné
; V Bank0
;:
;: (Interrupt Service rutinní (ISR))
incf count1, 1
;:
SWAPF STATUS_TEMP, W, odkládací původního stavu registru hodnotu
; Do W (obnoví původní banka)
MOVWF STATUS; Obnovit stav rejstříku od
; W registrovat
SWAPF W_TEMP, F, odkládací W_Temp křupky a zpět
; Hodnotu W_Temp
SWAPF W_TEMP, W, odkládací W_Temp k W k obnovení původního
; W hodnoty bez ovlivnění STATUS; RESET přerušit
NOP; pro simulátor zlom
BCF PIR1, TMR1IF
MOVLW 0xFD
MOVWF TMR1H
BSF T1CON, TMR1ON, Timer1 začne přírůstku
retfie;************************************************* *******
konec, musí dát konec pro efekt kompilátor dosn't program