A
asic1984
Guest
nazdar
Chci, aby kód, který ADC číst a posílat hodnot přes RS232
Snažil jsem se učinit následující kód a simulovat v Proteusi ale nic práce
převrátit na kanál jsem odesílání první znak, který zastupuje kanálu pak dolní a potom na vysoké hodnoty z ADC
přání, aby byl některý mi může pomoci najít problém
Kódrocesor 16f877
# include "p16f877.inc"org 0x00
goto start
org 0x04org 0x06začít
BSF STATUS, RP0; BANK 1
MOVLW 0x00
MOVWF TRISB; PŘÍSTAVY BC VÝSTUP (VÝSTUP NA DIGITÁLNÍ VALUE)
MOVWF TRISC; Nakonfigurujte analogové piny / referenční napětí a digitální I / O (ADCON1)MOVLW B'10000000 '; VREF IS VDD a VSS A VŠECHNY JSOU PINS ANALOG
MOVWF ADCON1; PRÁVO odůvodněnýchcall Irs232;------------------------------------------------- ------------
smyčky
;------------------------------------------------- ------------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
BCF STATUS, RP0; BANK 0
MOVLW B'10000001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2
CALL PRODLENÍ; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT1 BTFSC ADCON0, 2
Jdi WAIT1
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 84; POSLAT T
MOVWF TXREG
LOOP1 BTFSS PIR1, 4
Jdi LOOP1
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP2 BTFSS PIR1, 4
Jdi LOOP2
MOVFW ADRESH
MOVWF TXREG
LOOP3 BTFSS PIR1, 4
Jdi LOOP3
;------------------------------------------------- -------------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
; BCF STATUS, RP0; BANK 0
MOVLW B'10001001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT2 BTFSC ADCON0, 2
Jdi WAIT2
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 69; POSLAT E
MOVWF TXREG
LOOP4 BTFSS PIR1, 4
Jdi LOOP4
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP5 BTFSS PIR1, 4
Jdi LOOP5
MOVFW ADRESH
MOVWF TXREG
LOOP6 BTFSS PIR1, 4
Jdi LOOP6
;------------------------------------------------- -------------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
; BCF STATUS, RP0; BANK 0
MOVLW B'10010001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT3 BTFSC ADCON0, 2
Jdi WAIT3
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 65; Odeslat
MOVWF TXREG
LOOP7 BTFSS PIR1, 4
Jdi LOOP7
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP8 BTFSS PIR1, 4
Jdi LOOP8
MOVFW ADRESH
MOVWF TXREG
LOOP9 BTFSS PIR1, 4
Jdi LOOP9;------------------------------------------------- -------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
; BCF STATUS, RP0; BANK 0
MOVLW B'10011001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT4 BTFSC ADCON0, 2
Jdi WAIT4
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 82; POSLAT R
MOVWF TXREG
LOOP10 BTFSS PIR1, 4
Jdi LOOP10
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP11 BTFSS PIR1, 4
Jdi LOOP11
MOVFW ADRESH
MOVWF TXREG
LOOP12 BTFSS PIR1, 4
Jdi LOOP12
;------------------------------------------------- -------; Goto smyčky
;------------------------------------------------- ------------
Irs232
; Inicializovat SPBRG se zaregistrovat pro příslušná
, Přenosovou rychlostí.
Pokud vysokorychlostní přenosová rychlost je žádoucí,
; Nastavit bit BRGH
BSF STATUS, 5; BANK 1
MOVLW 42
MOVWF SPBRG, přenosová rychlost 28,8 K
BSF TXSTA, 2; PRO VYSOKOU rychlost
; Povolte asynchronní sériový port a zúčtování
; bit SYNC a nastavení bitové SPEN.BCF TXSTA, 4
BCF STATUS, 5; BANK 0
BSF RCSTA, 7; ENABLE SERIAL PORT; Povolit přenos nastavením bitu TXEN,
, která bude také nastavit bit TXIF.BSF STATUS, 5
BSF TXSTA, 5návrat;------------------------------------------------- -----------END
Chci, aby kód, který ADC číst a posílat hodnot přes RS232
Snažil jsem se učinit následující kód a simulovat v Proteusi ale nic práce
převrátit na kanál jsem odesílání první znak, který zastupuje kanálu pak dolní a potom na vysoké hodnoty z ADC
přání, aby byl některý mi může pomoci najít problém
Kódrocesor 16f877
# include "p16f877.inc"org 0x00
goto start
org 0x04org 0x06začít
BSF STATUS, RP0; BANK 1
MOVLW 0x00
MOVWF TRISB; PŘÍSTAVY BC VÝSTUP (VÝSTUP NA DIGITÁLNÍ VALUE)
MOVWF TRISC; Nakonfigurujte analogové piny / referenční napětí a digitální I / O (ADCON1)MOVLW B'10000000 '; VREF IS VDD a VSS A VŠECHNY JSOU PINS ANALOG
MOVWF ADCON1; PRÁVO odůvodněnýchcall Irs232;------------------------------------------------- ------------
smyčky
;------------------------------------------------- ------------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
BCF STATUS, RP0; BANK 0
MOVLW B'10000001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2
CALL PRODLENÍ; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT1 BTFSC ADCON0, 2
Jdi WAIT1
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 84; POSLAT T
MOVWF TXREG
LOOP1 BTFSS PIR1, 4
Jdi LOOP1
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP2 BTFSS PIR1, 4
Jdi LOOP2
MOVFW ADRESH
MOVWF TXREG
LOOP3 BTFSS PIR1, 4
Jdi LOOP3
;------------------------------------------------- -------------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
; BCF STATUS, RP0; BANK 0
MOVLW B'10001001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT2 BTFSC ADCON0, 2
Jdi WAIT2
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 69; POSLAT E
MOVWF TXREG
LOOP4 BTFSS PIR1, 4
Jdi LOOP4
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP5 BTFSS PIR1, 4
Jdi LOOP5
MOVFW ADRESH
MOVWF TXREG
LOOP6 BTFSS PIR1, 4
Jdi LOOP6
;------------------------------------------------- -------------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
; BCF STATUS, RP0; BANK 0
MOVLW B'10010001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT3 BTFSC ADCON0, 2
Jdi WAIT3
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 65; Odeslat
MOVWF TXREG
LOOP7 BTFSS PIR1, 4
Jdi LOOP7
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP8 BTFSS PIR1, 4
Jdi LOOP8
MOVFW ADRESH
MOVWF TXREG
LOOP9 BTFSS PIR1, 4
Jdi LOOP9;------------------------------------------------- -------; Vyberte A / D vstup kanálu (ADCON0)
; Vyberte A / D konverzí hodiny (ADCON0)
Obraťte se na A / D modul (ADCON0)
; BCF STATUS, RP0; BANK 0
MOVLW B'10011001 '
MOVWF ADCON0; Start konverze: Set GO Done bit (ADCON0)
BSF ADCON0, 2; Polling pro GO Done bit být vymazána (s přerušovaly povoleny);
WAIT4 BTFSC ADCON0, 2
Jdi WAIT4
; Číst hodnotu konverzeBCF STATUS, 5
MOVLW 82; POSLAT R
MOVWF TXREG
LOOP10 BTFSS PIR1, 4
Jdi LOOP10
BSF STATUS, 5
MOVFW ADRESL
BCF STATUS, 5
MOVWF TXREG
LOOP11 BTFSS PIR1, 4
Jdi LOOP11
MOVFW ADRESH
MOVWF TXREG
LOOP12 BTFSS PIR1, 4
Jdi LOOP12
;------------------------------------------------- -------; Goto smyčky
;------------------------------------------------- ------------
Irs232
; Inicializovat SPBRG se zaregistrovat pro příslušná
, Přenosovou rychlostí.
Pokud vysokorychlostní přenosová rychlost je žádoucí,
; Nastavit bit BRGH
BSF STATUS, 5; BANK 1
MOVLW 42
MOVWF SPBRG, přenosová rychlost 28,8 K
BSF TXSTA, 2; PRO VYSOKOU rychlost
; Povolte asynchronní sériový port a zúčtování
; bit SYNC a nastavení bitové SPEN.BCF TXSTA, 4
BCF STATUS, 5; BANK 0
BSF RCSTA, 7; ENABLE SERIAL PORT; Povolit přenos nastavením bitu TXEN,
, která bude také nastavit bit TXIF.BSF STATUS, 5
BSF TXSTA, 5návrat;------------------------------------------------- -----------END