$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 (VC_2_Z1_TEST.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: ; VC_2_Z1 Test ; HARDWARE - VC_2_Z1 ; Verbindung: Poti auf A/D-Wandler X3, P2.6 oder Ausgang U_DAC auf A/D-Wandler X3, P2.6 ; T1 -> Modus 1 - LED-Ausgabe - DIP.Switches werden eingelesen und über LED ausgegeben ; T3 -> Modus 2 - A/D-Wandlung ADC mit Poti an LED oder DAC, ; ; Interrupt T0 gibt Taktsignal, um mit inc die 8-Bit PWM von PCA CEX2 über das PCA0CPH2 zu varieren ; ; Erstellt am: Donnerstag, 19. Maerz 2009 15:56:27 ; Programmiert: ; Matthias Buerkle, buma0037aths-karlsruhe.de ; J. Walter, HS Karlsruhe ; Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 ; ;Kommentar: ; ;Aenderungen: ;Geaendert am: Donnerstag, 19. Maerz 2009 15:56:27 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil fuer allgemeine Konstanten ;------------------------------------------------------------------------ CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h call Init_Device ;Aufruf zur Initialisierung der Controller Funktionen jmp INIT ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ORG 0BH ;Timer0 Interrupt Vector call ISR_TIMER0 reti ORG 053h ; Interrupt ADC call ISR_ADC ; Interrupt Service Routine clr AD0INT ; Interruptflag zuruecksetzen reti ;------------------------------------------------------------------------ ;Initialisierungsteil fuer On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: ; geht sofort in Modus 1 MODUS_1: ; DAC-Spannung variiert, LED können umgeschaltet werden, Poti mov A,P0 ; DIP-Switches einlesen mov P3,A ; auf Port 3 ausgeben jb P1.3,MODUS_1 ; ? Modus 2? MODUS_2: setb AD0BUSY ; startet AD-Wandlung jb P1.1,MODUS_2 ; in LED-Ausgabe wechseln jmp ABFRAGE ; nicht notwendig ISR_TIMER0: push ACC ;Akku retten push PSW ;Programm Statuswort retten inc PCA0CPH2 ;den Wert von Pulsweite in CEX2 veraendern pop PSW pop ACC ret ISR_ADC: push ACC ; Akku retten push PSW ; Programmstatuswort retten mov A,ADC0H ; upper 8bit in Akku mov P3,A ; ADC 8-bit value to Port3 pop PSW pop ACC ret ;------------------------------------------------------------------------ ; Peripheral specific initialization functions, ; Called from the Init_Device label ;------------------------------------------------------------------------ PCA_Init: mov PCA0CN, #040h anl PCA0MD, #0BFh mov PCA0MD, #003h mov PCA0CPM2, #042h mov PCA0CPH2, #080h ret Timer_Init: mov TCON, #010h mov TMOD, #001h mov CKCON, #001h ret ADC_Init: mov AMX0P, #005h mov AMX0N, #01Fh mov ADC0CF, #0FCh mov ADC0CN, #080h ret Voltage_Reference_Init: mov REF0CN, #008h ret Port_IO_Init: ; P0.0 - Skipped, Push-Pull, Digital ; P0.1 - Skipped, Push-Pull, Digital ; P0.2 - Skipped, Push-Pull, Digital ; P0.3 - Skipped, Push-Pull, Digital ; P0.4 - TX0 (UART0), Push-Pull, Digital ; P0.5 - RX0 (UART0), Push-Pull, Digital ; P0.6 - SDA (SMBus), Push-Pull, Digital ; P0.7 - SCL (SMBus), Push-Pull, Digital ; P1.0 - CEX0 (PCA), Push-Pull, Digital ; P1.1 - CEX1 (PCA), Push-Pull, Digital ; P1.2 - CEX2 (PCA), Push-Pull, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Skipped, 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, Analog ; P2.7 - Unassigned, Open-Drain, Digital ; P3.0 - Unassigned, Push-Pull, Digital ; P3.1 - Unassigned, Push-Pull, Digital ; P3.2 - Unassigned, Push-Pull, Digital ; P3.3 - Unassigned, Push-Pull, Digital ; P3.4 - Unassigned, Push-Pull, Digital ; P3.5 - Unassigned, Push-Pull, Digital ; P3.6 - Unassigned, Push-Pull, Digital ; P3.7 - Unassigned, Push-Pull, Digital mov P2MDIN, #0BFh mov P4MDIN, #086h mov P0MDOUT, #0FFh mov P1MDOUT, #007h mov P3MDOUT, #0FFh mov P0SKIP, #00Fh mov P1SKIP, #020h mov XBR0, #005h mov XBR1, #043h ret Interrupts_Init: mov EIE1, #008h mov IE, #082h ret ; Initialization function for device, ; Call Init_Device from your main program Init_Device: lcall PCA_Init lcall Timer_Init lcall ADC_Init lcall Voltage_Reference_Init lcall Port_IO_Init lcall Interrupts_Init ret end