aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lab 2.X/Lab2A.s63
-rw-r--r--Lab_2B.X/lab2b_asm.s38
-rw-r--r--Lab_2B.X/lab2b_c.c33
3 files changed, 130 insertions, 4 deletions
diff --git a/Lab 2.X/Lab2A.s b/Lab 2.X/Lab2A.s
index fc9f30c..fa35d55 100644
--- a/Lab 2.X/Lab2A.s
+++ b/Lab 2.X/Lab2A.s
@@ -31,8 +31,10 @@ _main:
mov w0,AD1PCFG ; Set all pins to digital mode
mov #0b1111111111111110,w0
mov w0,TRISA ; set pin RA0 to output
- mov #0x0001,w0
- mov w0,LATA ; set pin RA0 high
+ mov #0x0000,w0
+ mov w0,LATA ; set pin RA0 low
+ call delay_100us
+ call setColor
call foreverLoop
wait_24cycles:
@@ -56,12 +58,65 @@ delay_1ms:
nop
return
-foreverLoop:
-
+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
diff --git a/Lab_2B.X/lab2b_asm.s b/Lab_2B.X/lab2b_asm.s
new file mode 100644
index 0000000..ec29c69
--- /dev/null
+++ b/Lab_2B.X/lab2b_asm.s
@@ -0,0 +1,38 @@
+.include "xc.inc"
+
+.text ;BP (put the following data in ROM(program memory))
+
+; This is a library, thus it can *not* contain a _main function: the C file will
+; define main(). However, we
+; we will need a .global statement to make available ASM functions to C code.
+; All functions utilized outside of this file will need to have a leading
+; underscore (_) and be included in a comment delimited list below.
+.global _write_0, _write_1, _wait_100us, _wait_1ms
+
+_delay_100us:
+ repeat #1593
+ nop
+ return
+
+_delay_1ms:
+ repeat #15993
+ nop
+ 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 \ No newline at end of file
diff --git a/Lab_2B.X/lab2b_c.c b/Lab_2B.X/lab2b_c.c
new file mode 100644
index 0000000..063dfd9
--- /dev/null
+++ b/Lab_2B.X/lab2b_c.c
@@ -0,0 +1,33 @@
+#include "xc.h"
+// CW1: FLASH CONFIGURATION WORD 1 (see PIC24 Family Reference Manual 24.1)
+#pragma config ICS = PGx1 // Comm Channel Select (Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1)
+#pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog Timer is disabled)
+#pragma config GWRP = OFF // General Code Segment Write Protect (Writes to program memory are allowed)
+#pragma config GCP = OFF // General Code Segment Code Protect (Code protection is disabled)
+#pragma config JTAGEN = OFF // JTAG Port Enable (JTAG port is disabled)
+
+
+// CW2: FLASH CONFIGURATION WORD 2 (see PIC24 Family Reference Manual 24.1)
+#pragma config I2C1SEL = PRI // I2C1 Pin Location Select (Use default SCL1/SDA1 pins)
+#pragma config IOL1WAY = OFF // IOLOCK Protection (IOLOCK may be changed via unlocking seq)
+#pragma config OSCIOFNC = ON // Primary Oscillator I/O Function (CLKO/RC15 functions as I/O pin)
+#pragma config FCKSM = CSECME // Clock Switching and Monitor (Clock switching is enabled,
+ // Fail-Safe Clock Monitor is enabled)
+#pragma config FNOSC = FRCPLL // Oscillator Select (Fast RC Oscillator with PLL module (FRCPLL))
+
+
+void setup(void) {
+ CLKDIVbits.RCDIV = 0; //Set RCDIV=1:1 (default 2:1) 32MHz or FCY/2=16M
+}
+void loop(void);
+int main(void) {
+ setup();
+ loop();
+ return 0;
+}
+
+void loop(void) {
+ while (1) {
+ //do nothing
+ }
+} \ No newline at end of file