TITLE (C) 1997 16C84 JOHN HUDSON (625 lines) TESTCARD GENERATOR 6/7/97. #include "pic16c84.h" ; Oscillator Clock = 8.000MHz ; Cycles/Second = 2,000,000 ;------ I/O Port constants ----------------------------------- ioprtb equ portb ;Dip Switch Port ioprta equ porta ;D/A Bus sync equ 0 ;Sync D/A Value black equ 5 ;Black Level grey1 equ 6 ;Grey Level 1 grey2 equ 7 ;Grey Level 2 grey3 equ 8 ;Grey Level 3 grey4 equ 9 ;Grey Level 4 grey5 equ 10 ;Grey Level 5 grey6 equ 11 ;Grey Level 6 grey7 equ 12 ;Grey Level 7 grey8 equ 13 ;Grey Level 8 grey9 equ 14 ;Grey Level 9 white equ 15 ;White Level ;define ram assignments intwreg equ 0ch ;Interrupted W Register intsreg equ 0dh ;Interrupted Status Register lines equ 10h ;line counter ;------------------------------------------------------------- segment byte at:0 'code' ;*** Reset and Interrupt Entry Points ************************ reset nop ;Reset Entry Point clrwdt clrf intcon goto init ;------------------------------------------------------------- ;*** Interrupt Service Routine Entry Point ******************* irq ;IRQ Entry Point retfie ;-------------------------------------------------------------- init clrf porta clrf portb movlw 11100000b tris porta movlw 11111111b ;1=input tris portb ;0=output movlw 01100001b option clrf porta ;-------------------- main background routines ------------------ main call equal_sync ;1 call equal_sync call equal_sync ;2 call equal_sync call equal_sync ;3 call equal_black call equal_black ;4 call equal_black call equal_black ;5 call equal_black call black_line ;6 call black_line ;7 call black_line ;8 call black_line ;9 call black_line ;10 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;20 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;30 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;40 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;50 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;60 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;70 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;80 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;90 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;100 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;110 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;120 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;130 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;140 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;150 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;160 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;170 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;180 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;190 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;200 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;210 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;220 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;230 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;240 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;250 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;260 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;270 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;280 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;290 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;300 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;310 call equal_black ;311 call equal_black ; call equal_black ;312 call equal_black ; call equal_black ;313 call equal_sync ; call equal_sync ;314 call equal_sync ; call equal_sync ;315 call equal_sync ; call equal_black ;316 call equal_black ; call equal_black ;317 call equal_black ; call black_line ;318 call black_line ;319 call black_line ;320 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;330 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;340 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;350 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;360 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;370 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;380 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;390 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;400 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;410 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;420 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;430 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;440 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;450 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;460 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;470 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;480 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;490 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;500 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;510 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;520 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;530 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;540 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;550 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;560 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;570 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;580 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;590 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;600 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;610 call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line call black_line ;620 call black_line call black_line call equal_black ;623 call equal_black ; call equal_black ;624 call equal_black ; call equal_black ;625 nop ;.5 nop ;.5 1 movlw sync ;.5 movwf porta ;.5 2 call delay2us ;2 4 movlw black ;.5 movwf porta ;.5 5 call delay10us ;10 15 call delay10us ;10 25 call delay6us ;10 31 goto main ;1 32 ;------ Various Output Routines -------------------------------- black_lines movwf lines bl_1 call black_line decfsz lines goto bl_1 return black_line ;1 1 movlw sync ;.5 movwf porta ;.5 2 call delay3_5us ;3.5 movlw black ;.5 6 movwf porta ;.5 call delay9_5us ;10 16 call delay10us ;10 26 call delay10us ;10 36 call delay10us ;10 46 call delay10us ;10 56 call delay7us ;10 63 return ;1 64 equal_black ;1 1 movlw sync ;.5 movwf porta ;.5 2 call delay2us ;2 4 movlw black ;.5 movwf porta ;.5 5 call delay10us ;10 15 call delay10us ;10 25 call delay6us ;10 31 return ;1 32 equal_sync ;1 1 movlw sync ;.5 movwf porta ;.5 2 call delay10us ;10 12 call delay10us ;10 22 call delay8us ;10 30 movlw black ;.5 movwf porta ;.5 31 return ;1 32 ;------ Delay Routines ------------------------------------------------------ delay10us nop delay9_5us nop delay9us nop delay8_5us nop delay8us nop delay7_5us nop delay7us nop delay6_5us nop delay6us nop delay5_5us nop delay5us nop delay4_5us nop delay4us nop delay3_5us nop delay3us nop delay2_5us nop delay2us return ;------- Configuration Data Area ------------------------------------ segment byte at:2000-2007 'id' code 3fffh ;ID Location 1 code 3fffh ;ID Location 2 code 3fffh ;ID Location 3 code 3fffh ;ID Location 4 segment byte at:2007-2008 'fuses' code 3ff1h ;Configuation Fuses, ;(CP_OFF, PWRUPT_OFF, WDT_OFF, OSC_XT) ;*** EEPROM Data Area, Holding Programable Offsets ************************** segment byte at:2100-2140 'eedata' ;**************************************************************************** END