Advertisement
Pagoniusz

Untitled

Mar 18th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. Trzeba połączyć się z kompem, wypisywać wciśnięte klawisze na LCD i przesyłać z powrotem wartość binarną odebranego chara (czyli 8 charów - zer i jedynek).
  2.  
  3. #include <p18f4520.h>
  4. #include <delays.h>
  5. #include "xlcd.h"
  6.  
  7. #pragma config WDT = OFF
  8.  
  9. int poprzedni_znak;
  10. char rb = '?'; // odebrany znak
  11.  
  12. void initXLCD(void);
  13. void txtXLCD(void);
  14. void initUSART(void);
  15. char reciveByteAndShow(void);
  16. void sendByte(char c);
  17.  
  18. void initUSART(void) {
  19. // Inicjalizacja modułu USART
  20.  
  21. /* Uzupełnij kod */
  22. TRISC = TRISC & 0xC0; // jakaś magia z instrukcji, nie wiem, czy potrzebne
  23.  
  24. SPBRG = 25; // szybkość przesyłu (nie ja to liczyłem)
  25. TXSTA = 0x24; // parametry przesyłu
  26. RCSTA = 0x90; // parametry odbioru
  27.  
  28. }
  29.  
  30. char reciveByteAndShow() {
  31. // Odebranie bajtu danych z komputera PC
  32. // i wyświetlenie go na wyświetlaczu LCD
  33.  
  34. /* Uzupełnij kod */
  35. if (PIR1bits.RCIF) // jeśli rejestr odbioru jest pełny
  36. {
  37. rb = RCREG; // odbierz i zapisz
  38. }
  39.  
  40. SetDDRamAddr(0x4F);
  41. putcXLCD(rb);
  42. return rb;
  43. }
  44.  
  45. void sendByte(char c) {
  46. // Wysłanie danych do komputera PC
  47. int i, temp, bit_jako_znak;
  48.  
  49. /* Uzupełnij kod */
  50. if (rb != poprzedni_znak) // jeśli znak inny niż poprzednio
  51. {
  52. poprzedni_znak = rb;
  53. temp = rb;
  54. // bity wysyłamy od najmłodszych i przez to jest błąd, znaki są w odwrotnej kolejności
  55. // zróbcie sobie jakiś bufor LIFO na te znaki i wysyłajcie z bufora
  56. for(i=0;i<8;i++) // 8 razy obetnij najmłodszy bit i wyślij go
  57. {
  58. bit_jako_znak = (temp % 2)+0x30; // weź najmłodszy bit i zamień na chara
  59. temp = temp/2; // obetnij go z naszej liczby
  60. if(PIR1bits.TXIF) // jeśli rejestr wysyłania jest pusty
  61. {
  62. TXREG = bit_jako_znak; // wpisz do niego znak
  63. PIR1bits.TXIF = 0; // oznacz jako pełny
  64. Delay1KTCYx(1); // czekamy, żeby spokojnie sobie wysłał
  65. }
  66. }
  67. }
  68.  
  69. }
  70.  
  71. void main() {
  72.  
  73. initXLCD();
  74. txtXLCD();
  75. initUSART();
  76.  
  77. while(1) {
  78. rb = reciveByteAndShow();
  79. Delay1KTCYx(10);
  80. sendByte(rb);
  81. }
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement