' ********************************************************************** ' * File: uk_BAS51_035.BAS * ' * Version: 1.1 * ' * Date: 03.01.11 * ' * Development Tools: Bascom 8051 COMP.,IDE 2.0.14.0 + FLIP 2.4.6 * ' * Cards: GMM 5115 + GMM TST3 * ' * Developed by: GRIFO(r) Italian Technology * ' * via Dell'Artigiano 8/6 * ' * 40016 S. Giorgio di Piano (BO) * ' * Tel. +39 051 892052 Fax. +39 051 893661 * ' * http://www.grifo.com http://www.grifo.it * ' * Author: Gianluca Angelini * ' ********************************************************************** ' Example program 035 of BASCOM 8051 course. ' The program acquire status of the red push buttons and report it, in reversed ' logic, on the correspondent yellow and green LEDs available on TIO 16 card. ' When buttons from T1 to T8 are pressed the near red LEDs are activated (this ' happens by hardware, not by program) and the correspondent LED from LD9 to ' LD16 are turned off. TIO 16 is connected to I/O connector CN4 of GMM TST3. ' The program describe its functionalities on a serial console provided of ' monitor and keyboard with a fixed physical protocol at 19200 Baud, 8 Bit ' x chr, 1 Stop bit, No parity. ' This console can be another system capable to support a serial RS 232 ' communication. In order to simplify the use it can be used a PC provided of ' one COMx line, that execute a terminal emulation program as HYPERTERMINAL or ' the homonym modality provided by BASCOM 8051 (see IDE Configuration). ' The program works only when the GMM 5115 is mounted on Z2 socket of GMM TST3!! ' Inside the program the terms that identify the used signals refers to electric ' diagram and technical manual of GMM TST3!! ' ' Added instructions: None. ' ' 03/01/11: uk_BAS51_035.BAS - Ver 1.1 - By G.A. ' First version. ' ' '**************************** IDE Configurations ******************************* ' NOTE: in order to correctly use this demo program, please execute the following ' steps: ' 1) Check the availability of 89C5115.DAT file into the directory where the ' BASCOM 8051 is installed and copy it if not present. ' 2) Into the window "Options | Compiler | Misc" set: ' Register File = 89C5115.DAT ' Byte End(Hex) = A0 ' Size warning = selected at 16384 (=4000H) ' 3) Into the window "Options | Communication" set: ' COM port = the PC line connected to GMM 5115, through GMM TST3 ' Baudrate = 19200 ' Parity = None ' Databits = 8 ' Stopbit = 1 ' Handshake = None ' Emulation = TTY ' Font = Terminal, Normal, 12 points, white colour ' Backcolor = Navy ' Run emulator modal = not selected ' 4) At the end of compilation, after the code is programmed on GMM 5115, select ' RUN mode and open the terminal emulation window of BASCOM 8051 with the ' option: Tools | Terminal emulator (Ctrl+T) and then reset or powen on the ' Mini Module. '************************* Compiler directives ********************************* $regfile "89C5115.DAT" ' Definitions file for used microcontroller $romstart = &H0 ' Code start address on FLASH $iramstart = &H0 ' Data start address on internal RAM $ramstart = &H0 ' Data start address on external RAM $ramsize = &H100 ' External RAM size $crystal = 14745600 ' Microcontroller crystal frequency $large ' Code size > 2K $map ' Generate debug information $baud = 19200 ' Serial communication speed: 19200 Baud ' Other parameters fixed to: 8 bit x chr ' 1 Stop bit ' No parity '******************************* Definitions *********************************** ' The resources used by program are connected as described in following table: ' !!! Note: On GMM TST3 the following jumpers must be properly configured: ' J1 in 2-3 ; J2 in 1-2 ; J3 in 1-2 ; J5 in 2-3 ; J7 in 2-3 ; J8 in 2-3 ' J9 in 2-3!!! ' ' TIO 16 GMM TST3 pin Z2 pin Signal Used uP ' button resource GMM TST3 GMM 5115 GMM 5115 signal ' T1 CN4.2 33 27 P1.0 DSW1.1 T2 DL1 P1.0 ' T2 CN4.1 32 26 P1.1 ADC1 T2EX P1.1 ' T3 CN4.4 31 25 P1.2 ADC2 ECI P1.2 ' T4 CN4.3 30 24 P1.3 ADC3 CEX0 P1.3 ' T5 CN4.6 29 23 P1.4 ADC4 CEX1 P1.4 ' T6 CN4.5 28 22 P1.5 ADC5 P1.5 ' T7 CN4.8 27 21 P1.6 ADC6 P1.6 ' T8 CN4.7 26 20 P1.7 ADC7 P1.7 ' LD9 CN4.15 25 19 P3.2 INT0 P3.2 ' LD10 CN4.16 24 18 P3.3 INT1 P3.3 ' LD11 CN4.13 23 17 P3.4 T0 P3.4 ' LD12 CN4.14 22 16 P3.5 T1 P3.5 ' LD13 CN4.11 21 15 P3.6 P3.6 ' LD14 CN4.12 19 13 P3.7 P3.7 ' LD15 CN4.9 14 8 P4.0 P4.0 ' LD16 CN4.10 15 9 P4.1 P4.1 ' ' Signal pin COMx pin CN5 pin Z1 pin Signal Used up ' PC DB9 GMM TST3 GMM TST3 GMM 5115 GMM 5115 signal ' TX 3 3 9 3 RxD RS232 P3.0 ' RX 2 2 10 4 TxD RS232 P3.1 ' GND 5 5 20 14 GND - ' This table shows that the connection cable between PC COM line and CN5 of ' GMM TST3 is a normal pin to pin cable or direct. Grifo(r) can supply it by ' requesting the CCR 9+9E code. Pinrx Alias P3.0 ' Signal connected to GMM 5115 RxD Pintx Alias P3.1 ' Signal connected to GMM 5115 TxD '************************* Constants declaration ******************************* '************************* Variables declaration ******************************* Dim Dirio As Byte ' Variable with digital I/O direction Dim Iod As Byte ' Variable with digital I/O status Dim Din As Byte ' Variable with digital Inputs status Dim Dout As Byte ' Variable with digital Outputs status Dim Hlpb As Byte ' General purpose help variable '************************ Subroutines declaration ****************************** Declare Sub Ini_pa(dirio As Byte) ' Initialize GMM TST3 port A Declare Sub Get_pa(iod As Byte) ' Get GMM TST3 port A Declare Sub Ini_pc(dirio As Byte) ' Initialize GMM TST3 port C Declare Sub Set_pc(iod As Byte) ' Set GMM TST3 port C '****************************** Main program *********************************** Main: Pinrx = 1 ' Initialize signals for serial communication Pintx = 1 ' as digital inputs Call Ini_pa(&Hff) ' Initialize lines connected to port A as inputs Call Ini_pc(&H00) ' Initialize lines connected to port C as outputs Print ' Separate from previous visualization by showing an empty new line Print Print " Set inverted status of red push buttons on yellow and green LEDs of TIO 16" Print "Mount Mini Module on Z2 of GMM TST3 and connect TIO 16 to CN4." Print "Program under execution..."; Do ' Begin endless loop Call Get_pa(iod) ' Get red push buttons states ' The program functionality is performed individually on each digital input ' (push button) and each digital output (LEDs) in order to show how to ' manage any resource separately from the other ones. The acquisition/setting ' of the input/output status is performed with I/O groups of TIO 16 Port A, C. ' The user can manage separately even these operations, if required. ' The following line reports also the single instruction that produces the ' same results of the 8 separated operations used below: ' Iod = Iod Xor &HFF ' Invert input status to obtain output status Din = Iod ' Save digital inputs status (red push buttons) Dout = &H00 ' Initialize digital output status (yellow and green LEDs) enabled Hlpb = Din And &H01 ' Obtain status only of T1 push button alone If Hlpb = 0 Then ' If T1 pressed Dout = Dout Or &H01 ' Disable LD9 LED End If Hlpb = Din And &H02 ' Obtain status only of T2 push button alone If Hlpb = 0 Then ' If T2 pressed Dout = Dout Or &H02 ' Disable LD10 LED End If Hlpb = Din And &H04 ' Obtain status only of T3 push button alone If Hlpb = 0 Then ' If T3 pressed Dout = Dout Or &H04 ' Disable LD11 LED End If Hlpb = Din And &H08 ' Obtain status only of T4 push button alone If Hlpb = 0 Then ' If T4 pressed Dout = Dout Or &H08 ' Disable LD12 LED End If Hlpb = Din And &H10 ' Obtain status only of T5 push button alone If Hlpb = 0 Then ' If T5 pressed Dout = Dout Or &H10 ' Disable LD13 LED End If Hlpb = Din And &H20 ' Obtain status only of T6 push button alone If Hlpb = 0 Then ' If T6 pressed Dout = Dout Or &H20 ' Disable LD14 LED End If Hlpb = Din And &H40 ' Obtain status only of T7 push button alone If Hlpb = 0 Then ' If T7 pressed Dout = Dout Or &H40 ' Disable LD15 LED End If Hlpb = Din And &H80 ' Obtain status only of T8 push button alone If Hlpb = 0 Then ' If T8 pressed Dout = Dout Or &H80 ' Disable LD16 LED End If Iod = Dout ' Save obtained digital output status (yellow and green LEDs) Call Set_pc(iod) ' Drive yellow and green LEDs with obtained combination Loop ' End endless loop End '*************************** End of main program ******************************* '*********************** Subroutines used by program *************************** ' Initializes the 8 pins of uP connected to port A on CN4 of GMM TST3: ' PA.0 -> P1.0 PA.1 -> P1.1 PA.2 -> P1.2 PA.3 -> P1.3 ' PA.4 -> P1.4 PA.5 -> P1.5 PA.6 -> P1.6 PA.7 -> P1.7 ' with the I/O modality passed in dirio parameter (bit at 0=output at low ' level; bit at 1=input), by leaving unchanged the status of all the other ' lines. ' Note: On GMM 5115 the digital I/O are quasi-bidirectional and they don't have ' direction settable. Thus the subroutine doesn't set direction on these lines ' and it has been developed for compatibility and code exchange with other ' Mini Modules. Sub Ini_pa(dirio As Byte) P1 = &HFF ' Set lines direction Iod = P1 End Sub ' Get status of the 8 lines of uP connected to port A on CN4 of GMM TST3, ' and returns it in Iod parameter. ' Note: On GMM 5115 all the lines of GMM TST3 port A are connected to port 1 of ' uP. Thus, the subroutine has only one instruction and it has been developed ' for compatibility and code exchange with other Mini Modules. Sub Get_pa(iod As Byte) Iod = P1 ' Get lines status End Sub ' Initializes the 8 pins of uP connected to port C on CN4 of GMM TST3: ' PC.0 -> P3.2 PC.1 -> P3.3 PC.2 -> P3.4 PC.3 -> P3.5 ' PC.4 -> P3.6 PC.5 -> P3.7 PC.6 -> P4.0 PC.7 -> P4.1 ' with the I/O modality passed in dirio parameter (bit at 0=output at low ' level; bit at 1=input), by leaving unchanged the status of all the other ' lines. ' Note: On GMM 5115 the digital I/O are quasi-bidirectional and they don't have ' direction settable. Thus the subroutine doesn't set direction on these lines ' and it has been developed for compatibility and code exchange with other ' Mini Modules. Sub Ini_pc(dirio As Byte) P3 = P3 Or &HFC ' Set direction of lines P3.2-P3.7 Iod = P3 P4 = P4 Or &H03 ' Set direction of lines P4.0-P4.1 Iod = P4 End Sub ' Set status of the 8 lines of uP connected to port C on CN4 of GMM TST3, ' with the status passed in Iod parameter, by leaving unchanged all the other ' lines. Sub Set_pc(iod As Byte) Hlpb = Iod And &H01 ' Mantain only bit 0 of status If Hlpb = 0 Then ' Set bit 0 status on signal P3.2 P3.2 = 0 Else P3.2 = 1 End If Hlpb = Iod And &H02 ' Mantain only bit 1 of status If Hlpb = 0 Then ' Set bit 1 status on signal P3.3 P3.3 = 0 Else P3.3 = 1 End If Hlpb = Iod And &H04 ' Mantain only bit 2 of status If Hlpb = 0 Then ' Set bit 2 status on signal P3.4 P3.4 = 0 Else P3.4 = 1 End If Hlpb = Iod And &H08 ' Mantain only bit 3 of status If Hlpb = 0 Then ' Set bit 3 status on signal P3.5 P3.5 = 0 Else P3.5 = 1 End If Hlpb = Iod And &H10 ' Mantain only bit 4 of status If Hlpb = 0 Then ' Set bit 4 status on signal P3.6 P3.6 = 0 Else P3.6 = 1 End If Hlpb = Iod And &H20 ' Mantain only bit 5 of status If Hlpb = 0 Then ' Set bit 5 status on signal P3.7 P3.7 = 0 Else P3.7 = 1 End If Hlpb = Iod And &H40 ' Mantain only bit 6 of status If Hlpb = 0 Then ' Set bit 6 status on signal P4.0 P4.0 = 0 Else P4.0 = 1 End If Hlpb = Iod And &H80 ' Mantain only bit 7 of status If Hlpb = 0 Then ' Set bit 7 status on signal P4.1 P4.1 = 0 Else P4.1 = 1 End If End Sub '******************* End of subroutines used by program ************************