Seriellt med pic i asm
Seriellt med pic i asm
Har programerat éndel asm med pic 16f84, men hur tar man hand om seriell data? Skulle någon kanske skriva ett kort exempel som lägger in seriell data i ett register?
Du lägger in talet precis oms vilket tal som hellst i ett register (som du sedan kanske kopierar till "ut-registret" som den kommer att skicka ifrån.
Enda skillnaden är att den skickar bit för bit istället för hela byten på en 8-bitars bred "buss".
Så vill du skicka $ff så skriver du 0b1111 1111 i registret.
Nu har jag inte använt uartén på en pic, men på en AVR så kollar man sedan ett register för att se om uart:en är redo att sända, man skyfflar in talet i registret, skriver "skicka" biten o vipps så matar den iväg det hela.
Enda skillnaden är att den skickar bit för bit istället för hela byten på en 8-bitars bred "buss".
Så vill du skicka $ff så skriver du 0b1111 1111 i registret.
Nu har jag inte använt uartén på en pic, men på en AVR så kollar man sedan ett register för att se om uart:en är redo att sända, man skyfflar in talet i registret, skriver "skicka" biten o vipps så matar den iväg det hela.
I F84 finns det ingen UART/USART.
Klart enklast är att byta till en F627 eller något liknande, som har USART. Annars får man göra det i mjukvara (bit bang).
Mjukvaruversionen blir något i den här stilen (ta emot från PORTB0 till register data):
rrf data ; Shifta register ett steg
bcf data,7 ; 0 i bit 7
btfsc PORTB,0 ; kolla insignalen
bsf data,7 ; 1 i bit 7 om porten var 1
Upprepas för varje databit, genom någon loop eller timer-interrupt. Dessutom måste det till startbit-detection och lite annat vilket krånglar till en del.
Ganska mycket jobb och inte värt det när det finns så billiga chip med inbyggd USART.
Klart enklast är att byta till en F627 eller något liknande, som har USART. Annars får man göra det i mjukvara (bit bang).
Mjukvaruversionen blir något i den här stilen (ta emot från PORTB0 till register data):
rrf data ; Shifta register ett steg
bcf data,7 ; 0 i bit 7
btfsc PORTB,0 ; kolla insignalen
bsf data,7 ; 1 i bit 7 om porten var 1
Upprepas för varje databit, genom någon loop eller timer-interrupt. Dessutom måste det till startbit-detection och lite annat vilket krånglar till en del.
Ganska mycket jobb och inte värt det när det finns så billiga chip med inbyggd USART.