Problémy s PORTB a Timwe1 přerušení

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

 
to stane, když zakážete bit T1OSCEN z rejstříku T1CON?(Str. 48 z de datashhet)

 
Ahoj

ještě nevím, ale jdu si číst až na to, také jsem se díval na BSF INTCON, PEIE Mabe kdybych to udělal BCF intcon, rbif.Myslíš, že to je kontrolní bit pro přerušení Portb.
I to zkusit zítra, a po mé výsledky.

přidány do post,
její zítra a já nemohl dostat portb I / O je hrát dobře s Timer1 proto jsem to změnil vstupy se k Porta.Program funguje dobře.Stále budu snažit přijít na důvod, proč portb nebude fungovat s timer1, ale teď jsem se do budoucna na můj program.Obrázek si to druhé.
Děkuji vám za vstup
gogo

 

Welcome to EDABoard.com

Sponsor

Back
Top