;********************************************************** ; Utilisation presonnelle autorisee, utilisation commerciale prohibee ;sans autorisation manuscrite de l'auteur. ;version V4B avec diviseur 128 extension 2.4GHZ ;Programme FXFRE705 aout 1991 Copyright X.Fenard ;24 Fev 91 Version 1.3 ;->RP + clignotement du Z + Liaison serie 9600 bauds ;09 sept 91 VERSION 1.2 ;->Mise au propre/installation version RADIO PLAN ; ;09 sept 91 VERSION 1.1 ;->ajout du controle du prediviseur UHF ; ;28 aout 91 VERSION 0.0 ;->PATCH pour le LM16155, 8 premiers caracteres de 0 a 7 ; les 8 autres de 40H a 47H!! ;le cpu doit fonctionner avec un quartz de 4,0mHZ ; ; ; ;********************************************************** ;********************* OPTION d'ASSEMBLAGE **************** CPU705P3: EQU 1 CPU705U3: EQU 0 P128: equ 1 ;diviseur 128 RDPLAN: EQU 1 ;version RADIO PLAN SI 1 LM40: EQU 0 ;afficheur 40 caracteres (0 pour 16) ;********************************************************** CPU "6805.TBL" ; CPU TABLE ; HEX OUTPUT FORMAT HOF "MOT8" ; ;*********************************************************** ;****************** PSEUDO INSTRUCTIONS ********************* ;ON FAIT UN LDX OU LDA QUI BOUFFE L'INSTRUCTION DE 2 OCTET SUIVANTE SKIP2X: EQU 0CEH ;1 OCTET SAUTE L'INSTRUCTION DE 2 OCTETS SUIVANTE,DETRUIT X SKIP2A: EQU 0C6H ;1 OCTET SAUTE L'INSTRUCTION DE 2 OCTETS SUIVANTE,DETRUIT A ; ;******************************** ;*DECLARATION VERSION ET DATE ROM ;* VERSION: EQU 0 SUBVERS: EQU 4 DATSIED: EQU 1H DATSIEU: EQU 9H DATANND: EQU 9H DATANNU: EQU 2H DATMOID: EQU 0H DATMOIU: EQU 8H ; ; I/O PORTS ALLOCATION ; PORTA: EQU 00H ; EN ENTREE SUR TOUT LE PORT,GERE SOUS IRQ ; D0: QA compteur ; D1: QB compteur ; D2: QC compteur ; D3: QD compteur /RS AFFICHEUR ; D4: QE compteur /D4 AFFICHEUR ; D5: QF compteur /D5 AFFICHEUR ; D6: QG compteur /D6 AFFICHEUR ; D7: QH compteur /D7 AFFICHEUR PORTB: EQU 01H ; EN E/S ; D0: ; D1: ; D2:IN INDIQUE LA PREDIVISION PAR 64 SI 1 ; D3:OUT E AFFICHEUR ; D4:OUT CLR COMPTEUR ; D5:OUT ENABLE COMPTEUR ; D6:OUT ENABLE DATA COMPTEUR ; D7:option OUT LECTURE LED DE CONFIGURATION SUR PA0/7 ; PORTC: EQU 02H ; EN SORTIE SUR TOUT LE PORT,GERE SOUS IRQ ; D0: ; D1:OUT COMMANDE CHOIX ENTRE UHF ACTIF SI 1 ; D2:OUT COMMANDE CHOIX ENTRE HF ACTIF SI 1 ; D3:option OUT RS232 ; PORTD: EQU 03H ;(pour 68705R3) DDRA: EQU 04H DDRB: EQU 05H DDRC: EQU 06H TDR: EQU 08H ;Timer Data Register TCR: EQU 09H ;Timer Control Register MIR: EQU 0AH ;Miscellaneous Register(pour 68705R3) PCR: EQU 0BH ;Program Control Register(pour 68705R3) ADCR: EQU 0EH ; A/D CONTROL REGISTER not use(pour 68705R3) ADRE: EQU 0FH ; A/D RESULT REGISTER not use(pour 68705R3) ; RAM ALLOCATION ; ORG 10H ;*FLAG DIVERS FLAGD: DFS 1 ;bit 0 OUTCAR RS et AFFICHEUR ;bit 1 CONV32 POUR CARRY ;bit 2 PATCH LM16155 1 SI LM16155 ;bit 3 AFFICHAGE/ZERO NON SIGNIFICATIF ;bit 4 ;bit 5 ;bit 6 ;bit 7 ;*VARIABLE UTILISE PAR LES SOUS PROGRAMMES PTSTR: DFS 1 ; OUTSTR ;*POUR SOUS PROGRAMME AFFICHEUR AFFWR: DFS 1 ;*VARIABLE POUR OUTHEX ET ACCUMULATEUR SOUTHEX:DFS 1 ;VARIABLE POUR HEX ;*VARIABLE POUR LE FREQUENCEMETRE TIMEPL: DFS 1 ;TEMPS PORTE TIMEPH: DFS 1 ;TEMPS PORTE CTL: DFS 1 ;COMPTEUR SOFT CTH: DFS 1 ;IDEM CTT: DFS 1 ;RESULTAT TIMER CTC: DFS 1 ;RESULTAT COMPTEUR ;*CONVERTISSEUR 32 BIT BINAIRE DECIMAL RESD: DFS 10 ACCD: DFS 10 CNB: DFS 1 ;*Visualisation de l'activitee LEZC: DFS 1 ;clignotement du Z ;*VAR FICTIVE POUR VERIF RAPIDE DE DEPASSEMENT ZVARF: DFS 1 ZVARM: EQU 05FH ;MAXIMUN ADRESSE ;************************************************************* ; ON NE DOIT PAS DEPASSER 05FH SINON ON TOMBE DANS LE STACK ;************************************************************* ;************* FIN DE LA ZONE DES VARIABLES ;******************************* ORG 080H ;table en ROM PAGE 0 ;Si car sup a 128 alors vers rs et afficheur. ZTEXT: TXTP1:DFB "@FENARD.",0FH,"X ",0 TXTP2:DFB 0AH,0DH,"FREQUENC",0FH,"EMETRE ",0 IF P128 TXTP3:DFB "V",30H+VERSION,".",30H+SUBVERS,"B ",DATMOID+30H,DATMOIU+30H,"/" ELSE TXTP3:DFB "V",30H+VERSION,".",30H+SUBVERS," ",DATMOID+30H,DATMOIU+30H,"/" ENDI DFB 0FH,DATSIED+30H,DATSIEU+30H DFB DATANND+30H,DATANNU+30H,0 IF RDPLAN TXTHF:DFB "ENTREE H",0FH,"F ",0 TXTUF:DFB "ENTREE U",0FH,"HF",0 ELSE TXTHF:DFB "ENTREE H",0FH,"F ->>",0 TXTUF:DFB "ENTREE U",0FH,"HF <<-",0 ENDI TXTLF: DFB 0AH,0DH,0 ;************************ programme prncipale ****************** DEBUT: ; *INIT DES PORTS CLR DDRA ;ENTREE LDA #0FH ;PORTB STA PORTB ;POUR AFFICHEUR,VU COMME 8 BIT LDA #0F8H STA DDRB ;OUT D7/D3 IN D2/D0 BCLR 3,PORTB ;FALSE ECRITURE DATA AFFICHEUR... LDA #0FH STA DDRC ;PORTC EN SORTIE ;RAZ DES VARIABLES LDX #ZVARM-10H ;BASE VARIABLE RAZV: CLR 10H,X ;EFFACE DECX BPL RAZV JSR AFFINI ;*INIT AFFICHEUR LDA #7AH ;z STA LEZC ;clignotement du Z ; *INIT DES VARIABLES IF LM40 BRCLR 0,PORTB,NLM BSET 2,FLAGD ;AFFICHEUR LM.... NLM: ELSE BSET 2,FLAGD ;AFFICHEUR LM16155.... ENDI JSR AFFCLRT LDA #TXTP1-ZTEXT JSR AFFT LDA #TXTP2-ZTEXT JSR AFFT LDA #TXTP3-ZTEXT JSR AFFT BRCLR 2,PORTB,TINHF LDA #TXTUF-ZTEXT BRA TINOK TINHF: LDA #TXTHF-ZTEXT TINOK: JSR AFFT LOOP: BRCLR 2,PORTB,LOOP1 ;TEST ENTRE SELECTIONNE (1=UHF) IF RDPLAN BSET 1,PORTC ;Entree UHF ACTIVE BCLR 2,PORTC ELSE BSET 0,PORTC BCLR 1,PORTC ENDI BRA LOOP2 LOOP1: IF RDPLAN BCLR 1,PORTC ;ENtree HF ACTIVE BSET 2,PORTC ELSE BCLR 0,PORTC BSET 1,PORTC ENDI LOOP2: LDA #27H ;10000=2710H STA TIMEPH ;TEMPS PORTE LDA #10H STA TIMEPL ;TEMPS PORTE JSR GESFI ;Gestion de la FI BSR MESFRQ ;MESURE JSR GPREDV ;GESTION PREDIVISEUR JSR CONV32 ;CONVERSION DECIMALE LDA #128+0 ;POSITION AFFICHEUR JSR AFFWRO LDA #0DH JSR OUTRS LDA #0AH JSR OUTRS JSR AFF10 JMP LOOP AFFT: JSR OUTSTR ;SORTIE DE MESSAGE JSR WAIT1S ;ATTENTE 1 SECONDE JMP AFFCLRT ;************************ Sous-Programme *********************** OUTCAR: JSR AFFWRD ;sortie afficheur/car conserve BMI OUTCRR ;negatif donc controle venant de afficheur CMP #0FH ;sauf caractere de controle BEQ OUTCRR JMP OUTRS ;sortie RS232 9600 bauds OUTCRR: RTS ;*********************************************** ;MESURE DE LA FREQUENCE ;DANS TIMEPX LE TEMPS D'OUVERTURE DE LA PORTE MESFRQ: CLR DDRA ;PORTA EN ENTRE BSET 5,PORTB ;COMPTEUR CCKEN=1 BCLR 6,PORTB ;COMPTEUR G=0 BCLR 4,PORTB ;COMPTEUR CLR=0 BSET 4,PORTB ;COMPTEUR FIN CLR CLR CTL ;COMPTEUR SOFT CLR CTH ;IDEM LDA #01101000B ;RAZCARRY,PASIRQ,EXTCLKDIS,RAZ,:1 STA TCR CLR TDR ;RAZ DU TDR LDA #01111000B ;RAZCARRY,PASIRQ,EXTCLKENA,RAZ,:1 STA TCR MESFRQ1:BCLR 5,PORTB ;(7)<>CCLKEN=0 BRCLR 7,TCR,MESFRQ2 ;(10)PAS DE CARRY DU TIMER INTERNE BCLR 7,TCR ;(7)RAZ CARRY INC CTL ;(6) BNE MESFRQ3 ;(4) INC CTH ;(6) BRA MESFRQ4 ;(4) -27 MESFRQ2:CMP 312 CMP 312 CMP 312 ;COMPENSATION DES TEMPS NOP MESFRQ3:CMP 312 ;(5) CMP 312 ;(5) --44 MESFRQ4: NOP NOP CMP 312 CMP 312 CMP 312 CMP 312 LDA TIMEPL ;(4)TEST 0 BNE MESFRQ6 ;(4) DEC TIMEPH ;(6)HIGHT BMI MESFRQ9 ;(4)FIN MESURE ATTENTION MAX 127 BRA MESFRQ5 ;(4) MESFRQ6:CMP 312 CMP 312 NOP NOP MESFRQ5:DEC TIMEPL ;(6)TEMPS PORTE BRA MESFRQ1 ;(4)ATTENTE -54 +46 = 100 MICROSEC MESFRQ9:CMP 312 CMP 312 NOP NOP BSET 5,PORTB ;(7)FIN DE LA MESURE ;SI OK TEMPS PORTE = BRCLR 7,TCR,MESFRQT ;PAS DE CARRY DU TIMER INTERNE BCLR 7,TCR ;RAZ CARRY (non utile) INC CTL ;ANALYSE SI PAS DE CLOCK PERDU.. BNE MESFRQT ;EN ROUTE INC CTH MESFRQT: ;MISE A JOUR DES VALEURS DES COMPTEURS LDA TDR STA CTT ;RESULTAT TIMER LDA PORTA STA CTC ;RESULTAT COMPTEUR BSET 6,PORTB ;COMPTEUR G=1 TST CTC ;GESTION COMPTE EN TROP BPL MESFRQC INC CTT LDA CTT CMP #1 ;EN TROP? BNE MESFRQC ;NON LDA CTL BNE MESFRQB DEC CTH MESFRQB:DEC CTL MESFRQC:DEC CTT ;MISE A JOUR COM CTT ;VALEUR TIMER RTS ;*********************************************** ;GESTION PREDIVISEUR GPREDV: BRCLR 2,PORTB,GPREDVF IF P128 LDX #7 ;*128 ELSE LDX #6 ;*64 ENDI GPREDVL:LSL CTC ;<-0 ROL CTT ;RESULTAT TIMER ROL CTL ;NEXT ROL CTH DECX BNE GPREDVL GPREDVF:RTS ;*********************************************** ;gestion de la FI (supra ou infra ADDK doit suffire) GESTFI: FIK1: EQU 0 FIK2: EQU 0 FIK3: EQU 0 FIK4: EQU 0 GESFI: ADDK: LDA #FIK1 ADD CTC STA CTC LDA #FIK2 ADC CTT STA CTT LDA #FIK3 ADC CTL STA CTL LDA #FIK4 ADC CTH STA CTH RTS ;*********************************************** ;*CONVERSION 32 BITS BINAIRE EN 10 CHIFFRE DECIMAUX... CONV32: LDX #9 BCLR 1,FLAGD ;CARRY A 0 CONV320:CLR RESD,X CLR ACCD,X ;RAZ DES ACCUMULATEURS DECX BPL CONV320 INC ACCD+9 ;DEPART A 1 LDA #32 ;NOMBRE DE BITS STA CNB ;CONVERSION 32 CONV321:LSR CTH ;0->C ROR CTL ;NEXT ROR CTT ;RESULTAT TIMER ROR CTC BCC CONV324 ;PAS D'ADDITION DE RESULTAT LDX #9 CONV322:LDA RESD,X ADD ACCD,X CMP #9 ;TEST MAX? BLS CONV323 SUB #10 INC RESD-1,X CONV323:STA RESD,X DECX BPL CONV322 CONV324:LDX #9 CONV325:LDA ACCD,X LSLA ;*2 BRCLR 1,FLAGD,CONV32B ;CARRY INCA ;OK BCLR 1,FLAGD CONV32B:CMP #9 ;TEST MAX? BLS CONV326 SUB #10 BSET 1,FLAGD CONV326:STA ACCD,X DECX BPL CONV325 DEC CNB BNE CONV321 RTS ;*********************************************** ;*AFFICHAGE DES 10 CHIFFRES ; DE LA FORME 1 200 652,005 kHZ ; 0 NON SIGNIFICATIF NON AFFICHE AFF10: CLR CNB ;MONBRE BCLR 3,FLAGD ;0 NON SIGNIFICATIF AFF101: LDX CNB LDA RESD,X ;LE NOMBRE ORA #30H CMP #30H BNE AFF101B BRSET 3,FLAGD,AFF101B LDA #20H ;ESPACE BRA AFF101C AFF101B:BSET 3,FLAGD ;AFFICHE TOUT AFF101C:JSR OUTCAR ;SORTIE INC CNB LDA CNB BRCLR 2,FLAGD,AFF102 ;PATCH LM16155 CMP #6 BNE AFF102 LDA #0FH ;SECONDE MOITIE AFFICHEUR JSR OUTCAR LDA CNB AFF102: CMP #1 BNE AFF103 AFF102B:LDA #20H ;ESPACE AFF102C:JSR OUTCAR BRA AFF109 AFF103: CMP #4 BEQ AFF102B CMP #7 BNE AFF109 BSET 3,FLAGD ;AFFICHE TOUT LDA #2CH ;',' BRA AFF102C AFF109: LDA CNB CMP #10 BNE AFF101 LDA #6BH ;k JSR OUTCAR LDA #48H ;H JSR OUTCAR LDA LEZC ;clignotement du Z EOR #20H ;minuscule majuscule STA LEZC JMP OUTCAR ; RTS ;*SORTIE DUNE CHAINE EN ROM DE CAR POINTER PAR PTSTR ;FIN PAR 0 OUTSTR: STA PTSTR OUTSTR1:LDA PTSTR TAX ;UN POINTEUR LDA ZTEXT,X ;EN ZONE TEXT BEQ OUTCRS ;FIN SI ZERO JSR OUTCAR INC PTSTR BRA OUTSTR1 ;NEXT ;*********************************************** ;*attente 1 seconde ,A et X detruit WAIT1S: CLRX WAIT1S1:JSR WAIT4 DECX BNE WAIT1S1 OUTCRS: RTS ;*********************************************** ;SOUS PROGRAMME POUR LA GESTION DES AFFICHEURS ALPHA-NUMERIQUE ;INIT DE L'AFFICHEUR T=40 MICRO SEC ;->4BIT,1LIGNE,5*7 ;->EFFACE L'AFFICHEUR,PUIS POSITION ORG ;->DISPLAY ON,CURSOR OFF,BLINK OFF ;->ENTRY MODE SET SHIFT DROITE AFFINI: BSR AFFWRS8 ;POUR LA SYNCHRO LOW/HIGHT IF LM40 LDA #020H ;4BIT,1LIGNE,5*7 BRCLR 1,PORTB,AFFINX LDA #028H ;4BIT,1LIGNE,5*7 <> AFFINX: ELSE LDA #028H ;4BIT,1LIGNE,5*7 <> ENDI BSR AFFWRO8 ;ECRITURE ORDRE <> BSR AFFWRO ;IDEM <> BSR AFFCLRT ;EFFACE L'AFFICHEUR,PUIS POSITION ORG LDA #0CH ;DISPLAY ON,CURSOR OFF,BLINK OFF BSR AFFWRO LDA #06H ;ENTRY MODE SET SHIFT DROITE BRA AFFWRO ;*********************************************** ;EFFACE L'AFFICHEUR T=1640 MICRO SEC (IDEM A LF) AFFCLRW:LDA #01H ;CLR DISPLAY BSR AFFWRO BRA WAIT2 ;PREFERABLE... ;EFFACE L'AFFICHEUR ET REPOSITIONNE A L'ORIGINE AFFCLRT:BSR AFFCLRW ;REPOSITIONNE LE CURSOR A L'ORIGINE T=1640 MICROSEC AFFORGW:LDA #02H ;COMMANDE CURSOR AT HOME BSR AFFWRO ;V252 ;ATTENTE FIN DE LA COMMANDE WAIT2: CLRA WAITA: DECA ;(4)256*8 MICRO SEC=2MS BNE WAITA ;(4) RTS WAIT4: BSR WAIT4B ;LE DOUBLE WAIT4B: BRA WAIT2 ;LE DOUBLE V22 encore plus lent au debut ;SORTIE EN MODE RESET POUR RESYNCHRO 8 BIT AFFWRS8:LDA #33H ;MODE 8 BIT BSR AFFWRO8 ;2 FOIS mais est peut etre en mode 4 bit... BSR AFFWRO8 ;1 fois de plus V22 assure une resynchro 8bit! ;SORTIE D'UN OCTET D'ORDRE MODE 8 BIT QUI EST DANS A, A PRESERVE AFFWRO8:STA AFFWR ;ORDRE A ECRIRE BSR AFFWON ;DIODES SWITCH BLOQUE,PORTA OUT OK,AFFWR DS A AND #0F0H ;DATA STA PORTA ;EN PLACE BSR AFFWNE ;PULSE E BSR WAIT4 ;MODE LLLLENT! BRA AFFWFI8 ;PORTA EN INPUT,AFFWR DS A PUIS RTS ;SORTIE D'UN OCTET DE DATA MODE 4 BIT QUI EST DANS A,A PRESERVE.. ;OUTCAR: AFFWRD: STA AFFWR ;DATA A ECRIRE AND #7FH ;EN ASCII CMP #15 BLS AFFWRRB STA AFFWR ;DATA A ECRIRE BSR AFFWON ORA #008H ;DATA STA PORTA ;EN PLACE BSR AFFWNE ORA #008H ;DATA BRA AFFWFI ;POSITIONNEMENT EN POSITION 9 AFFWRO9:LDA #128+9 ;AFFICHAGE EN POSITION 9 V22 V240 ;SORTIE D'UN OCTET D'ORDRE MODE 4 BIT QUI EST DANS A, A PRESERVE AFFWRO: STA AFFWR ;ORDRE A ECRIRE ; BRCLR 2,PORTA,AFVRTS ;ARRET COMMANDE AFFICHAGE ET RS232 V252 BSR AFFWON AND #0F0H ;DATA STA PORTA ;EN PLACE BSR AFFWNE AND #0F0H AFFWFI: STA PORTA ;EN PLACE BSR AFFEN ;ENABLE A 1 AFFWFI8:CLR DDRA ;EN ENTREE AFFWRR: LDA AFFWR AFVRTS: RTS AFFWRRB:BNE AFFWRR ;SI 0FH ET SI BRCLR 2,FLAGD,AFFWRR ;AFFICHEUR LM16155.... LDA #128+40 ;NOUVELLE POSITION.... BRA AFFWRO AFFEN: BSET 3,PORTB ;ENABLE A 1 BCLR 3,PORTB ;A JOUR RTS AFFWON: BSET 6,PORTB ;PAX EN SORTIE BLOCAGE SORTIE COMPTEUR LDA #0F8H STA DDRA ;OUT D7/D3 IN D2/D0 LDA AFFWR ;DATA A ECRIRE RTS AFFWNE: BSR AFFEN ;ENABLE A 1 LDA AFFWR ;DATA A ECRIRE LOW 4BIT LSLA LSLA LSLA LSLA RTS ;********************************************** ;sortie d'un caractere dans A, car perdu 9600 bauds OUTRS: LDX #7 BCLR 3,PORTC ;start bit BSR OUTRSW ;8 attente pour 104 microsec (77) BRA OUTRSB ;4 OUTRS0: BSR OUTRSW5 ;8 OUTRSB: RORA ;4 premier bit BCC OUTRS1 ;4 BSET 3,PORTC ;7 BRA OUTRS2 ;4 OUTRS1: BCLR 3,PORTC ; BRA OUTRS2 ; OUTRS2: DECX ;6 BNE OUTRS0 ;4 envoi des bits BSR OUTRSW5 ;dernier bit RORA BCC OUTRS3 OUTRS3: BSET 3,PORTC ;STOP bit BSR OUTRSW ;1er stop bit ; BRA OUTRSW ;second et fin ;attente de 77 micro sec environ OUTRSW: OUTRSW1:BSR OUTRSW2 ;8+8+13+13+8+13+13 =76 OUTRSW2:BSR OUTRSWN ; OUTRSWN:CMP 312 ;5 N=13 RTS ;6 ;attente 67 OUTRSW5:NOP BSR OUTRSW6 ;8+8+10+8+10+10=64 OUTRSW6:BSR OUTRSW7 ; OUTRSW7:NOP ;N=10 NOP ;2 RTS ;6 ;*********************** Gestion des IRQ *********************** ;**************** GIEXT: ;exterieure GITIM: BCLR 7,TCR ;RESET IRQ GIRTI: GISWI: RTI ;******* Pour le 68705X3 ***** IF CPU705P3 ORG 0784H ENDI IF CPU705U3 ORG 0F38H ENDI ; DFB 080H ;RC oscillateur DFB 000H ;QUARTZ ;******* Vecteurs IF CPU705P3 ORG 07F8H ENDI IF CPU705U3 ORG 0FF8H ENDI DWM GITIM ;irq timer DWM GIEXT ;exterieure DWM GISWI ;une SWI DWM DEBUT ;Main programme END