virxar

napisalem taki program ale mam problem nie wiem gdzie jest blad tzn program sie kompiluje i chodzi w jagodzie ale jest jeden problem. a wiec zaczne od poczatku ma to byc wąż czyli na wyswietlaczu matrycowym ta dolna kreska ma latac w lewo lub w prawo zależnie od tego czy wcislem klawisz czy nie, przykladowo leci w lewo wciskam klawisz to ma leciec w prawo, a gorną i dolną strzałką mam regulować predkość tego węzyka, tego nie umiem zrobić no i w samym proglamie gdzies wkradl mi sie blad bo 7 i 8 bit swieci jednoczesnie i nie wiem dlaczego oraz kolejny problem ktory trzeba zlikwidowac to to zeby przy trzymanym wcisnieciu klawisza wezyk nie latal w lewo i prawo tylko zmienil odrazu kierunek i w tym 1 lecial. Prosze o zrobienie tego zadania, jestem poczatkujacy mialem dopiero 2 razy zajecia z tego z góry dziekuje. PROGRAM MA DZIAŁAĆ W JAGODZIE I NA DSM51 o to moj kod: ;************************************************ ;LEKCJA 7 - KLAWIATURA PRZEGL?DANA SEKWENCYJNIE ;PRZYK?AD 3 - ELIMINACJA DRGA? STYK?W ;************************************************ LED EQU P1.7 KEY EQU 0B5H ;odczyt klawiatury SEG_ON EQU P1.6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KONFIGURACJA LICZNIKA TH0_SET EQU 0B8H TL0_SET EQU 000H TCONF EQU 00000001B ;Stale uzywane w programie KEY_COD EQU 00001001B ;wybrane klawisze-1i4 ;KEY_COD EQU 11111111B LJMP START ORG 0BH LJMP PRZERWANIE_T0 ORG 100H START: ;;KONFIGURACJA LICZNIKA MOV SP,#20 MOV TH0,#TH0_SET MOV TL0,#TL0_SET MOV TMOD,#TCONF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRZERWANIA SETB EA ;WLACZENIE PRZERWAN SETB ET0 ;WLACZENIE PRZERWANIA LICZNIKA 0 MOV R3,#00000001B ;wyb?r wska?nika MOV R1,#CSDS ;adres wyboru wska?nika MOV R0,#CSDB ;wybor segmentow MOV A,#00001000B MOVX @R0,A ;wpisz kod segment?w SETB TR0 ;URUCHOMIENIE LICZNKA LOOP: MOV A,@R1 MOV R4,A SETB SEG_ON ;wylaczenie wyswietlacza MOV A,#KEY_COD MOVX @R1,A ;wpisz wybrane klawisze JNB KEY,NIE_WCISNIETY ; CPL LED NIE_WCISNIETY: MOV A,R4 MOVX @R1,A ;wpisz wybrane klawisze CLR SEG_ON ;w??czenie wska?nika MOV A,#1 LCALL DELAY_100MS SJMP LOOP ;powr?t do p?tli czekania na klawisz PRZERWANIE_T0: PUSH PSW PUSH ACC MOV TH0,#TH0_SET MOV TL0,#TL0_SET MOV A,R3 SETB SEG_ON ;wylaczenie wyswietlacza JB LED,OBR_W_PRAWO RL A ;obrot w lewo - numer CJNE A,#01000000B,OBR MOV A,#00000001B OBR: MOV R3,A SJMP END_T0 OBR_W_PRAWO: RR A ;obr?t w lewo - numer CJNE A,#10000000B,OBRP MOV A,#00100000B OBRP: MOV R3,A END_T0: MOV A,R3 ;aktualny wska?nik (1z8) MOVX @R1,A ;wpisz nr wska?nika CLR SEG_ON ;w??czenie wska?nika POP ACC POP PSW RETI

+0 pkt.
Odpowiedz

Odpowiedzi: 0

Najnowsze pytania w kategorii Informatyka

Ładuj więcej