Går rakt på koden som är förkortad för eran pleasure.
först:
Kod: Markera allt
include <P16F628A.inc>
__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
sen:
Kod: Markera allt
org 0x00
goto reset
reset
movlw B'00000111' ;Komparatorer = av
movwf CMCON ;
banksel TRISA ;Bank 1
movlw B'11010111' ;PIC options
movwf OPTION_REG ;
clrf INTCON ;Intterupt AV!!!!!!
movlw B'11111111' ;PORTA = ingångar
movwf TRISA ;
movlw B'00000010' ;PORTB = utgångar samt USART
movwf TRISB ;bits 1/2 = (RX/TX)
banksel TXSTA
movwf B'00100100' ;Initsierar USART TX
movwf TXSTA ;
banksel RCSTA
movlw B'10010000' ;Initsierar USART RX
movwf RCSTA
banksel SPBRG
movwf D'207' ;Baudrate = 19200
movlw SPBRG ;
banksel TXREG
clrf TXREG
banksel PORTA ;Bank 0
goto mainloop
sen mainloopen som scannar knappar.
Jag trycker jag på en knapp som är korrekt software-avstudsad och då hoppar programmet till en rutin som först tänder en debug-LED för att veta att knapptrycket registrerades sen slänger jag in ett värde i W och kallar på rutinen send som ser ut så här:
Kod: Markera allt
send
movwf TXREG ; Sänd data i W
banksel TXSTA ;
wthere btfss TXSTA,TRMT ; Vänta på TRMT flaggan (1=klar)
goto wthere
banksel PORTA ;
return
jag har provat 1000 olikka varianter och tom bytt PIC men till ingen nytta. det verkar som att den inte sänder det som finns i TXREG och TRMT-bitten alltid är 0.
I koden som jag nu har lämnat så har jag satt TRISB,TX biten till 0 men jag har provat att ha den som ett också. hur ska det vara igentligen? i databladet står det att den ska vara confad som input men i alla kodsnuttar jag hittar på nätet så är den output.
jag har juh uppenbarligen gjort ngn stor tabbe men var?
TXSTA och RCSTA registrerna måste vara rätt för jag har quadruppel-kollat inställningarna utav dom.
har jag ngt fel i __config månne?
jaja hoppas ngn kan hjälpa en trött stackars sate.
kram kram
/jonkers