From f7dddf06297f415413760f3bedf00f7297e60cf7 Mon Sep 17 00:00:00 2001 From: RossTheRoss Date: Wed, 8 Apr 2020 11:17:47 -0500 Subject: Forget to add a bunch of things oops --- Lab2A.X/Lab2A.s | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 Lab2A.X/Lab2A.s (limited to 'Lab2A.X/Lab2A.s') diff --git a/Lab2A.X/Lab2A.s b/Lab2A.X/Lab2A.s new file mode 100644 index 0000000..407def8 --- /dev/null +++ b/Lab2A.X/Lab2A.s @@ -0,0 +1,123 @@ + +.include "xc.inc" ; required "boiler-plate" (BP) + +;the next two lines set up the actual chip for operation - required +config __CONFIG2, POSCMOD_EC & I2C1SEL_SEC & IOL1WAY_OFF & OSCIOFNC_ON & FCKSM_CSECME & FNOSC_FRCPLL & SOSCSEL_LPSOSC & WUTSEL_FST & IESO_OFF +config __CONFIG1, WDTPS_PS1 & FWPSA_PR32 & WINDIS_OFF & FWDTEN_OFF & BKBUG_ON & GWRP_ON & GCP_ON & JTAGEN_OFF + + .bss ; put the following labels in RAM +counter: + .space 2 ; a variable that takes two bytes (we won?t use + ; it for now, but put here to make this a generic + ; template to be used later). +stack: + .space 32 ; this will be our stack area, needed for func calls + +.text ; BP (put the following data in ROM(program memory)) + +;because we are using the C compiler to assemble our code, we need a "_main" label +;somewhere. (There's a link step that looks for it.) +.global _main ;BP +;your functions go here + +_main: + + bclr CLKDIV,#8 ;BP + nop + ;; --- Begin your main program below here --- + + + mov #0x9fff,w0 + mov w0,AD1PCFG ; Set all pins to digital mode + mov #0b1111111111111110,w0 + mov w0,TRISA ; set pin RA0 to output + mov #0x0000,w0 + mov w0,LATA ; set pin RA0 low + call delay_100us + call setColor + call foreverLoop + +wait_24cycles: + ; 2 cycles for function call + repeat #17 ; 1 cycle to load and prep + nop ; 17+1 cycles to execute NOP 18 times + return ; 3 cycles for the return + +wait_32cycles: ; 2 + repeat #24 ; 1 + nop ; 25+1 cycles = 26 + return ; 3 + +delay_100us: + repeat #1593 + nop + return + +delay_1ms: + repeat #15993 + nop + return + +write_bit_stream: + call wait_24cycles ; 24 cycles + clr LATA ; set pin RA0 low = 1 cycle + call wait_32cycles ; 32 cycles + inc LATA ; set pin RA0 high = 1 cycle + return + +write_0: ;2 cycles for function call + inc LATA ;1 + repeat #3 ;1 for load + nop ;3+1=4 nop + clr LATA ;1 + repeat #6 ;1 for load + nop ;1+6=7 nop + return ;3 return + + +write_1: ;2 cycle call + inc LATA ;1 + repeat #10;1 load + nop ;1+10=11 nop + clr LATA ;1 + nop ;1 + return ;3 return + +setColor: + ;Set R + call write_1 + call write_1 + call write_1 + call write_1 + call write_1 + call write_1 + call write_1 + call write_1 + ;Set G + call write_1 + call write_0 + call write_0 + call write_1 + call write_1 + call write_0 + call write_1 + call write_1 + ;Set B + call write_0 + call write_0 + call write_0 + call write_0 + call write_0 + call write_0 + call write_0 + call write_0 + + return + +foreverLoop: +; call write_bit_stream + nop + bra foreverLoop + + +.end -- cgit v1.2.3