$NOMOD51 ;der Modus fuer 8051 wird abgeschaltet $debug $nolist ;es wird kein Listing fuer reg535 erstellt $include(C8051F340.inc) ;die C8051F340-spezifischen Daten $list ;es wird ein Listing erstellt $title (P13_MCWS08.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: ;Binaeres Zaehlen von 0 bis 7 an L1,L2,L3 ;L1 an P3.2 ;xxx111xx = 000 = 0 ;xxx110xx = 001 = 1 ;xxx101xx = 010 = 2 ; ;xxx001xx = 110 = 6 ;xxx000xx = 111 = 7 ; ;Betaetigung Taster 1: Licht einschalten ;Betaetigung Taster 2: Licht ausschalten ;Betaetigung Taster 3: Binaeres Zaehlen ; ; ;Erstellt am: Donnerstag, 1. Januar 2009 12:49:20 ;Programmiert: Juergen Walter ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 ; ;Kommentar: ; ;Aenderungen: ;Geaendert am: Donnerstag, 1. Januar 2009 12:49:20 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil für allgemeine Konstanten ;------------------------------------------------------------------------ V_BLINK EQU 10 ;Zaehlfrequenz Dezimal MODULO_8 EQU 8 ;von 0 bis 7 CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ org 0Bh ;Sprungmarke zur ISR fuer Timer0 TIME_INT0: ;ISR fuer Timer0 (Adresse 0Bh) call TIMER_0 ;Aufruf: UP Schleife reti ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: setb P3.2 ;Lampe ausschalten mov R2,#V_BLINK ;R2 Ist Zaehlvariable call Init_Device ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.1,LAMPE_AN jnb P1.2,LAMPE_AUS jnb P1.3,ZAEHLEN ajmp ABFRAGE LAMPE_AN: clr TR0 ;Timer0 ausschalten clr P3.2 ;Licht einschalten ajmp ABFRAGE ;Springe zur Adresse ABFRAGE LAMPE_AUS: clr TR0 ;Timer0 ausschalten setb P3.2 ;Licht ausschalten ajmp ABFRAGE ;Springe zur Adresse ABFRAGE ZAEHLEN: mov TL0,#0h ;LOW-Byte Zaehlregister von Timer0 auf 0h setzen mov TH0,#0h ;HIGH-Byte Zaehlregister von Timer0 auf 0h setzen mov P3,#11111111b ;P3 mit "0" beginnen mov R3,#8 ;bis 8 zaehlen setb TR0 ;Timer0 aktivieren, TR0 wird bei Sprung auf die ;ISR (Adresse 0Bh) von der Hardware wieder zurueck- ;gesetzt ajmp ABFRAGE TIMER_0: djnz R2,SPRUNG ;Sprung falls R2 noch nicht 0 mov A,P3 ;Port einlesen rr A ;Damit von 0 bis 7 rr A ; subb A,#1 ;A dekrementieren rl A ;um 2 Leuchten nach links shiften rl A mov P3,A ;Port schreiben mov R2,#V_BLINK ;Register 2 erhaelt wieder den Wert V_BLINK djnz R3,SPRUNG ;wurde bis 7 gezaehlt? mov R3,#MODULO_8 ;Wieder von 8 herunter mov P3,#0FFh ;Und wieder von 0 an SPRUNG: ret ;------------------------------------------------------------------------ ; Peripheral specific initialization functions, ; Called from the Init_Device label ;------------------------------------------------------------------------ PCA_Init: anl PCA0MD, #0BFh mov PCA0MD, #000h ret Timer_Init: mov TMOD, #001h ret Port_IO_Init: ; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Skipped, Push-Pull, Digital ; P1.2 - Skipped, Push-Pull, Digital ; P1.3 - Skipped, Push-Pull, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital ; P2.4 - Unassigned, Open-Drain, Digital ; P2.5 - Unassigned, Open-Drain, Digital ; P2.6 - Unassigned, Open-Drain, Digital ; P2.7 - Unassigned, Open-Drain, Digital ; P3.0 - Unassigned, Open-Drain, Digital ; P3.1 - Unassigned, Open-Drain, Digital ; P3.2 - Skipped, Push-Pull, Digital ; P3.3 - Skipped, Push-Pull, Digital ; P3.4 - Skipped, Push-Pull, Digital ; P3.5 - Unassigned, Open-Drain, Digital ; P3.6 - Unassigned, Open-Drain, Digital ; P3.7 - Unassigned, Open-Drain, Digital mov P1MDOUT, #00Eh mov P3MDOUT, #01Ch mov P1SKIP, #00Eh mov P3SKIP, #01Ch mov XBR1, #040h ret Oscillator_Init: mov OSCICN, #083h ret Interrupts_Init: mov IE, #082h ret ; Initialization function for device, ; Call Init_Device from your main program Init_Device: lcall PCA_Init lcall Timer_Init lcall Port_IO_Init lcall Oscillator_Init lcall Interrupts_Init ret end