diff options
29 files changed, 607 insertions, 95 deletions
diff --git a/ExamPrepTwo/ASM_layout.hwl b/ExamPrepTwo/ASM_layout.hwl new file mode 100644 index 0000000..af05bda --- /dev/null +++ b/ExamPrepTwo/ASM_layout.hwl @@ -0,0 +1,18 @@ +OPEN source 0 0 60 42 +Source < attributes MARKS off +OPEN assembly 60 0 40 30 +Assembly < attributes ADR on,CODE off,ABSADR on,SYMB off,TOPPC 0xF800 +OPEN procedure 60 60 40 17 +Procedure < attributes VALUES on,TYPES off +OPEN register 60 30 40 30 +Register < attributes FORMAT AUTO,COMPLEMENT None +OPEN memory 60 77 40 23 +Memory < attributes FORMAT hex,COMPLEMENT None,WORD 1,ASC on,ADR on,ADDRESS 0x80 +OPEN data 0 42 60 28 +Data < attributes SCOPE global,COMPLEMENT None,FORMAT Symb,MODE automatic,UPDATERATE 10,NAMEWIDTH 16 +OPEN command 0 70 60 30 +Command < attributes CACHESIZE 1000 +bckcolor 50331647 +font 'Courier New' 9 BLACK +AUTOSIZE on +ACTIVATE Assembly Memory Register Command Data Source Procedure diff --git a/ExamPrepTwo/Default.mem b/ExamPrepTwo/Default.mem Binary files differnew file mode 100644 index 0000000..bf49148 --- /dev/null +++ b/ExamPrepTwo/Default.mem diff --git a/ExamPrepTwo/ExamPrepTwo.mcp b/ExamPrepTwo/ExamPrepTwo.mcp Binary files differnew file mode 100644 index 0000000..69554d2 --- /dev/null +++ b/ExamPrepTwo/ExamPrepTwo.mcp diff --git a/ExamPrepTwo/ExamPrepTwo_Data/CWSettingsWindows.stg b/ExamPrepTwo/ExamPrepTwo_Data/CWSettingsWindows.stg Binary files differnew file mode 100644 index 0000000..db4777a --- /dev/null +++ b/ExamPrepTwo/ExamPrepTwo_Data/CWSettingsWindows.stg diff --git a/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.o b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.o Binary files differnew file mode 100644 index 0000000..f0db289 --- /dev/null +++ b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.o diff --git a/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.sx b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.sx new file mode 100644 index 0000000..cccac41 --- /dev/null +++ b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.sx @@ -0,0 +1,5 @@ +S0700000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C4578616D5072657054776F5C4578616D5072657054776F5F446174615C5374616E646172645C4F626A656374436F64655C6D61696E2E61736D2E70726D69 +S104300000CB +S12331008646C63C1806A7863CC6BA1806A786C4C6BA1816A78646C6C41816A7F63000B66B +S108312030004326FD10 +S9033100CB diff --git a/ExamPrepTwo/ExamPrepTwo_Data/Standard/TargetDataWindows.tdt b/ExamPrepTwo/ExamPrepTwo_Data/Standard/TargetDataWindows.tdt Binary files differnew file mode 100644 index 0000000..f8b9e74 --- /dev/null +++ b/ExamPrepTwo/ExamPrepTwo_Data/Standard/TargetDataWindows.tdt diff --git a/ExamPrepTwo/Full_Chip_Simulation.ini b/ExamPrepTwo/Full_Chip_Simulation.ini new file mode 100644 index 0000000..6a37f67 --- /dev/null +++ b/ExamPrepTwo/Full_Chip_Simulation.ini @@ -0,0 +1,27 @@ +[Environment Variables] +GENPATH={Project}Sources;{Compiler}lib\hc12c\src;{Compiler}lib\hc12c\include;{Compiler}lib\hc12c\lib;{Compiler}lib\xgatec\src;{Compiler}lib\xgatec\include;{Compiler}lib\xgatec\lib +LIBPATH={Compiler}lib\hc12c\include;{Compiler}lib\xgatec\include +OBJPATH={Project}bin +TEXTPATH={Project}bin +ABSPATH={Project}bin + +[HI-WAVE] +Target=sim +Layout=ASM_layout.hwl +LoadDialogOptions=AUTOERASEANDFLASH NORUNAFTERLOAD +CPU=HC12 +MainFrame=2,3,-1,-1,-1,-1,130,130,2050,1153 +TOOLBAR=57600 57601 32795 0 57635 57634 57637 0 57671 57669 0 32777 32776 32782 32780 32781 32778 0 32806 + + + +[Simulator] +CMDFILE0=CMDFILE STARTUP ON ".\cmd\Full_Chip_Simulation_startup.cmd" + +[Simulator HC12] +CMDFILE0=CMDFILE RESET ON ".\cmd\Full_Chip_Simulation_reset.cmd" +CMDFILE1=CMDFILE PRELOAD ON ".\cmd\Full_Chip_Simulation_preload.cmd" +CMDFILE2=CMDFILE POSTLOAD ON ".\cmd\Full_Chip_Simulation_postload.cmd" +CMDFILE3=CMDFILE SETCPU ON ".\cmd\Full_Chip_Simulation_setcpu.cmd" +HCS12_SUPPORT=1 +FCS=MC9S12C32 diff --git a/ExamPrepTwo/Sources/derivative.inc b/ExamPrepTwo/Sources/derivative.inc new file mode 100644 index 0000000..988343b --- /dev/null +++ b/ExamPrepTwo/Sources/derivative.inc @@ -0,0 +1,10 @@ + + ; Note: This file is recreated by the project wizard whenever the MCU is + ; changed and should not be edited by hand + ; + + ; include derivative specific macros + INCLUDE 'mc9s12c32.inc' + + + diff --git a/ExamPrepTwo/Sources/main.asm b/ExamPrepTwo/Sources/main.asm new file mode 100644 index 0000000..fc86659 --- /dev/null +++ b/ExamPrepTwo/Sources/main.asm @@ -0,0 +1,56 @@ +************************************************************************** +* Parameter Declearation Section +* +* Export Symbols + xdef pgstart ; export 'pgstart' symbol + absentry pgstart ; for assembly entry point + +* Symbols and Macros +PORTA equ $0000 ; i/o port A addresses +DDRA equ $0002 ; data direction register for PORTA +PORTB equ $0001 ; i/o port B addresses +DDRB equ $0003 ; data direction register for PORTB + +************************************************************************** +* Data Section: address used [ $3000 to $30FF ] RAM Memory +* + org $3000 ; Reserved RAM memory starting address + ; for Data for CMPEN 472 class +num dc.b 0 + +* +************************************************************************** +* Program Section: address used [ $3100 to $3FFF ] RAM Memory +* + org $3100 ; Program start address, in RAM +pgstart ldaa #70 + ldab #60 + aba + nop + + ldaa #60 + ldab #-70 + aba + nop + + ldaa #-60 + ldab #-70 + sba + nop + + ldaa #70 + ldab #-60 + sba + nop + + ldab num + +dly ldaa num +loop deca + bne loop + +* +************************************************************************** + +done + end ; Last line of the file
\ No newline at end of file diff --git a/ExamPrepTwo/bin/Project.abs b/ExamPrepTwo/bin/Project.abs Binary files differnew file mode 100644 index 0000000..f0db289 --- /dev/null +++ b/ExamPrepTwo/bin/Project.abs diff --git a/ExamPrepTwo/bin/Project.abs.phy b/ExamPrepTwo/bin/Project.abs.phy new file mode 100644 index 0000000..c781cf8 --- /dev/null +++ b/ExamPrepTwo/bin/Project.abs.phy @@ -0,0 +1,2 @@ +S04E0000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C4578616D5072657054776F5C62696E5C50726F6A6563742E61627398 +S9030000FC diff --git a/ExamPrepTwo/bin/Project.abs.s19 b/ExamPrepTwo/bin/Project.abs.s19 new file mode 100644 index 0000000..287233e --- /dev/null +++ b/ExamPrepTwo/bin/Project.abs.s19 @@ -0,0 +1,5 @@ +S04E0000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C4578616D5072657054776F5C62696E5C50726F6A6563742E61627398 +S104300000CB +S12331008646C63C1806A7863CC6BA1806A786C4C6BA1816A78646C6C41816A7F63000B66B +S108312030004326FD10 +S9030000FC diff --git a/ExamPrepTwo/bin/main.dbg b/ExamPrepTwo/bin/main.dbg new file mode 100644 index 0000000..f284c7d --- /dev/null +++ b/ExamPrepTwo/bin/main.dbg @@ -0,0 +1,55 @@ +************************************************************************** +* Parameter Declearation Section +* +* Export Symbols + xdef pgstart ; export 'pgstart' symbol + absentry pgstart ; for assembly entry point + +* Symbols and Macros +PORTA equ $0000 ; i/o port A addresses +DDRA equ $0002 ; data direction register for PORTA +PORTB equ $0001 ; i/o port B addresses +DDRB equ $0003 ; data direction register for PORTB + +************************************************************************** +* Data Section: address used [ $3000 to $30FF ] RAM Memory +* + org $3000 ; Reserved RAM memory starting address + ; for Data for CMPEN 472 class +num dc.b 0 + +* +************************************************************************** +* Program Section: address used [ $3100 to $3FFF ] RAM Memory +* + org $3100 ; Program start address, in RAM +pgstart ldaa #70 + ldab #60 + aba + nop + + ldaa #60 + ldab #-70 + aba + nop + + ldaa #-60 + ldab #-70 + sba + nop + + ldaa #70 + ldab #-60 + sba + nop + + ldab num + +dly ldaa num +loop deca + bne loop + +* +************************************************************************** + +done diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Postload.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Postload.cmd new file mode 100644 index 0000000..ac4d359 --- /dev/null +++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Postload.cmd @@ -0,0 +1 @@ +// After load the commands written below will be executed diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Preload.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Preload.cmd new file mode 100644 index 0000000..0bed464 --- /dev/null +++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Preload.cmd @@ -0,0 +1 @@ +// Before load the commands written below will be executed diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Reset.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Reset.cmd new file mode 100644 index 0000000..bf55944 --- /dev/null +++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Reset.cmd @@ -0,0 +1 @@ +// After reset the commands written below will be executed diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_SetCPU.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_SetCPU.cmd new file mode 100644 index 0000000..6a1549a --- /dev/null +++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_SetCPU.cmd @@ -0,0 +1 @@ +// At startup the commands written below will be executed diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Startup.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Startup.cmd new file mode 100644 index 0000000..6a1549a --- /dev/null +++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Startup.cmd @@ -0,0 +1 @@ +// At startup the commands written below will be executed diff --git a/ExamPrepTwo/prm/burner.bbl b/ExamPrepTwo/prm/burner.bbl new file mode 100644 index 0000000..0c57619 --- /dev/null +++ b/ExamPrepTwo/prm/burner.bbl @@ -0,0 +1,157 @@ +/* logical s-record file */ +OPENFILE "%ABS_FILE%.s19" +format=motorola +busWidth=1 +origin=0 +len=0x1000000 +destination=0 +SRECORD=Sx +SENDBYTE 1 "%ABS_FILE%" +CLOSE + + +/* physical s-record file */ +OPENFILE "%ABS_FILE%.phy" +format = motorola +busWidth = 1 +len = 0x4000 + +/* logical non banked flash at $4000 and $C000 to physical */ +origin = 0x004000 +destination = 0x0F8000 +SENDBYTE 1 "%ABS_FILE%" + +origin = 0x00C000 +destination = 0x0FC000 +SENDBYTE 1 "%ABS_FILE%" + +/* physical FTS512K flash window to physical +origin = 0x008000 +destination = 0x080000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS256K parts flash window to physical +origin = 0x008000 +destination = 0x0C0000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS128K parts flash window to physical +origin = 0x008000 +destination = 0x0E0000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS64K parts flash window to physical +origin = 0x008000 +destination = 0x0F0000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS32K parts flash window to physical +origin = 0x008000 +destination = 0x0F8000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* logical 512 kB banked flash to physical */ +origin = 0x208000 +destination = 0x080000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x218000 +destination = 0x084000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x228000 +destination = 0x088000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x238000 +destination = 0x08C000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x248000 +destination = 0x090000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x258000 +destination = 0x094000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x268000 +destination = 0x098000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x278000 +destination = 0x09C000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x288000 +destination = 0x0A0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x298000 +destination = 0x0A4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2A8000 +destination = 0x0A8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2B8000 +destination = 0x0AC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2C8000 +destination = 0x0B0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2D8000 +destination = 0x0B4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2E8000 +destination = 0x0B8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2F8000 +destination = 0x0BC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x308000 +destination = 0x0C0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x318000 +destination = 0x0C4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x328000 +destination = 0x0C8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x338000 +destination = 0x0CC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x348000 +destination = 0x0D0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x358000 +destination = 0x0D4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x368000 +destination = 0x0D8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x378000 +destination = 0x0DC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x388000 +destination = 0x0E0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x398000 +destination = 0x0E4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3A8000 +destination = 0x0E8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3B8000 +destination = 0x0EC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3C8000 +destination = 0x0F0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3D8000 +destination = 0x0F4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3E8000 +destination = 0x0F8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3F8000 +destination = 0x0FC000 +SENDBYTE 1 "%ABS_FILE%" + +CLOSE + diff --git a/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini b/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini index 0ea39fd..e7c287d 100644 --- a/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini +++ b/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini @@ -10,7 +10,7 @@ Target=sim Layout=Full_Chip_Simulation.hwl LoadDialogOptions=AUTOERASEANDFLASH NORUNAFTERLOAD CPU=HC12 -MainFrame=2,3,-32000,-32000,-1,-1,985,223,2200,1246 +MainFrame=2,3,-1,-1,-1,-1,985,223,2200,1246 Configuration=Full_Chip_Simulation.hwc Statusbar=1 ShowToolbar=1 diff --git a/cmpen472hw4_McDonnell/Sources/cmpen472hw4_McDonnell.asm b/cmpen472hw4_McDonnell/Sources/cmpen472hw4_McDonnell.asm new file mode 100644 index 0000000..87a8a3c --- /dev/null +++ b/cmpen472hw4_McDonnell/Sources/cmpen472hw4_McDonnell.asm @@ -0,0 +1,172 @@ +************************************************************************** +* +* Title: LED Light Dimmer Loop +* +* Objective: CMPEN 472 Homework 4 +* +* Revision: V1.0 +* +* Date: Feb. 14, 2025 +* +* Programmer: Jacob McDonnell +* +* Company: The Pennsylvania State University +* Department of Computer Science and Engineering +* +* Algorithm: Simple Parallel I/O use, time delay-loop, and PWM control +* +* Register Use: A to control LEDS initially and for Light Level +* X to hold the counter in the loop. +* +* Memory Use: RAM Locations from $3000 for data, +* RAM Locations from $3100 for program +* +* Input: Parameters hard-coded in the program - PORTB +* Switch 1 at PORTB bit 0 +* Switch 2 at PORTB bit 1 +* Switch 3 at PORTB bit 2 +* Switch 4 at PORTB bit 3 +* +* Output: LED 1 at PORTB bit 4 +* LED 2 at PORTB bit 5 +* LED 3 at PORTB bit 6 +* LED 4 at PORTB bit 7 +* +* Observation: This program will decrease LED 4 from 100% to 0% in 400ms +* and then increase LED 4 from 0% to 100% in 400ms. The program +* will loop forever. +* +* Note: ON CSM-12C128 board, +* Switch 1 is at PORTB bit 0, and +* LED 4 is at PORTB bit 7. +* +* Comments: This program is developed and simulated using CodeWarrior +* development software and targeted for Axion +* Manufacturing's CSM-12C128 board running at 24MHz. +* +************************************************************************** +* Parameter Declearation Section +* +* Export Symbols + xdef pgstart ; export 'pgstart' symbol + absentry pgstart ; for assembly entry point + +* Symbols and Macros +PORTA equ $0000 ; i/o port A addresses +DDRA equ $0002 ; data direction register for PORTA +PORTB equ $0001 ; i/o port B addresses +DDRB equ $0003 ; data direction register for PORTB + +************************************************************************** +* Data Section: address used [ $3000 to $30FF ] RAM Memory +* + org $3000 ; Reserved RAM memory starting address + ; for Data for CMPEN 472 class +Counter dc.w $0036 ; X register count number for time Delay + ; loop for 10 useconds + ; The work to calculate this number is in + ; the comments for the delay10usec subroutine. + +LEVEL dc.b $0005 ; Light Level that the LED should be + +* +************************************************************************** +* Program Section: address used [ $3100 to $3FFF ] RAM Memory +* + org $3100 ; Program start address, in RAM +pgstart lds #$3100 ; initialize the stack pointer + + ldaa #%11110001 ; LED 1,2,3,4 at PORTB bit 4,5,6,7 + staa DDRB ; set PORTB bit 4,5,6,7 as output + + + ldaa #%01010000 + staa PORTB ; Turn on only LEDs 1 & 3 on PORTB + +mainLoop + ldaa #100 ; load 100 into accumulator A +decrease tbeq A,increase ; Test if A == 0, skip loop if so + staa LEVEL ; store A in counter LEVEL + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + deca ; decrement accumulator A by 1 + bra decrease ; loop to decrease always +increase cmpa #100 ; Compare A to 100 + beq mainLoop ; Test if A == 100, jump to mainLoop + staa LEVEL ; store A in counter LEVEL + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + inca ; increment accumulator A by 1 + bra increase ; loop to increase always + +************************************************************************** +* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory +* + +;************************************************************************* +; dimmer subroutine +; +; This subroutine will dim LED4 to a given level +; +; Input: Two 1 byte counters, ONN and OFF, for how many times +; LED4 should be on and off for. +; Output: LED4 dimmed to a given level, wasted cycles +; Registers in use: A accumulator to counter number of times looped +; Memory locations in use: Two bytes ONN and OFF used to dim the LED4 to a given level +; +; Comments: This subroutine requires delay10usec subroutine +; + +dimmer + bset PORTB,%10000000 ; Turn LED4 on + psha ; Save A to the stack + ldaa LEVEL ; Load the light level into accumulator A +onDelay tbeq A, skipToOff ; Test if A == 0, skip loop if so + jsr delay10usec ; delay for 10 microseconds + deca ; decrement accumulator A by 1 + bra onDelay ; jump back to onDelay always +skipToOff bclr PORTB,%10000000 ; Turn off LED4 + ldaa #100 ; load 100 into accumulator A + suba LEVEL ; Subtract LEVEL to get off count +offDelay tbeq A,doneLoop ; Test if A == 0, skip loop if so + jsr delay10usec ; delay 10 microseconds + deca ; decrement accumulator A by 1 + bra offDelay ; jump back to offDelay always +doneLoop pula ; restore A from the stack + rts ; return to caller + +;************************************************************************* +; delay10usec subroutine +; +; This subroutine causes a 10 usec. delay +; +; Input: a 16bit count number in 'Counter' +; Output: time delay, cpu cycle wasted +; Registers in use: X register, as counter +; Memory locations in use: a 16bit input number at 'Counter' +; +; Comments: Code relies on counter being $39 to be exactly 10 usec work is below +; Given: freq = 24MHz = 24000000 sec = 10 usec = 0.00001 +; freq = cycles / seconds +; +; cycles = freq * seconds = 24000000Hz * 0.00001 = 240 +; +; This sub routine is 12 + 4 * 'Counter' cycles long, solving for 'Counter' +; the result is found to be 57. +; + +delay10usec + pshx ; Save register x to the stack + ldx Counter ; load counter into register x +innerLoop dex ; decrement register x by 1 + bne innerLoop ; loop while register x is not 0 + pulx ; restore register x from the stack + nop ; extra nop to make exactly 10 usec + rts ; return to caller + + end ; last line of the file + diff --git a/cmpen472hw4_McDonnell/Sources/main.asm b/cmpen472hw4_McDonnell/Sources/main.asm index bbf1a9a..87a8a3c 100644 --- a/cmpen472hw4_McDonnell/Sources/main.asm +++ b/cmpen472hw4_McDonnell/Sources/main.asm @@ -1,22 +1,22 @@ ************************************************************************** * -* Title: LED Light Dimmer +* Title: LED Light Dimmer Loop * -* Objective: CMPEN 472 Homework 3 +* Objective: CMPEN 472 Homework 4 * * Revision: V1.0 * -* Date: Feb. 5, 2025 +* Date: Feb. 14, 2025 * * Programmer: Jacob McDonnell * * Company: The Pennsylvania State University * Department of Computer Science and Engineering * -* Algorithm: Simple Parallel I/O use and time delay-loop demo +* Algorithm: Simple Parallel I/O use, time delay-loop, and PWM control * -* Register Use: A: LED Light on/off state and Switch 1 on/off state -* X: Delay loop counter +* Register Use: A to control LEDS initially and for Light Level +* X to hold the counter in the loop. * * Memory Use: RAM Locations from $3000 for data, * RAM Locations from $3100 for program @@ -32,8 +32,9 @@ * LED 3 at PORTB bit 6 * LED 4 at PORTB bit 7 * -* Observation: This program will dim the LED4 to either 5% when the -* switch is not pressed and 15% when the switch is pressed. +* Observation: This program will decrease LED 4 from 100% to 0% in 400ms +* and then increase LED 4 from 0% to 100% in 400ms. The program +* will loop forever. * * Note: ON CSM-12C128 board, * Switch 1 is at PORTB bit 0, and @@ -83,25 +84,24 @@ pgstart lds #$3100 ; initialize the stack pointer staa PORTB ; Turn on only LEDs 1 & 3 on PORTB mainLoop - ldaa #100 ; 1 ; load 100 into accumulator A - ldab #100 ; 1 ; load 100 into accumulator B -decrease tbeq A,increase ; 3 ; Test if A == 0, skip loop if so - staa LEVEL ; 3 ; store A in counter LEVEL - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - deca ; 1 ; decrement accumulator A by 1 - bra decrease ; 3 ; loop to decrease always -increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoop if so - staa LEVEL ; 3 ; store A in counter LEVEL - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - inca ; 1 ; increment accumulator A by 1 - decb ; 1 ; decrement accumulator B by 1 - bra increase ; 3 ; loop to increase always + ldaa #100 ; load 100 into accumulator A +decrease tbeq A,increase ; Test if A == 0, skip loop if so + staa LEVEL ; store A in counter LEVEL + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + deca ; decrement accumulator A by 1 + bra decrease ; loop to decrease always +increase cmpa #100 ; Compare A to 100 + beq mainLoop ; Test if A == 100, jump to mainLoop + staa LEVEL ; store A in counter LEVEL + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + inca ; increment accumulator A by 1 + bra increase ; loop to increase always ************************************************************************** * Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory @@ -122,22 +122,22 @@ increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoo ; dimmer - bset PORTB,%10000000 ; 6 ; Turn LED4 on - psha ; 2 ; Save A to the stack - ldaa LEVEL ; 3 ; Load the light level into accumulator A -onDelay tbeq A, skipToOff ; 3 ; Test if A == 0, skip loop if so - jsr delay10usec ; 244 ; delay for 10 microseconds - deca ; 1 ; decrement accumulator A by 1 - bra onDelay ; 3, 1; jump back to onDelay always -skipToOff bclr PORTB,%10000000 ; 6 ; Turn off LED4 - ldaa #100 ; 1 ; load 100 into accumulator A - suba LEVEL ; 3 ; Subtract LEVEL to get off count -offDelay tbeq A,doneLoop ; 3 ; Test if A == 0, skip loop if so - jsr delay10usec ; 244 ; delay 10 microseconds - deca ; 1 ; decrement accumulator A by 1 - bra offDelay ; 3, 1; jump back to offDelay always -doneLoop pula ; 3 ; restore A from the stack - rts ; 5 ; return to caller + bset PORTB,%10000000 ; Turn LED4 on + psha ; Save A to the stack + ldaa LEVEL ; Load the light level into accumulator A +onDelay tbeq A, skipToOff ; Test if A == 0, skip loop if so + jsr delay10usec ; delay for 10 microseconds + deca ; decrement accumulator A by 1 + bra onDelay ; jump back to onDelay always +skipToOff bclr PORTB,%10000000 ; Turn off LED4 + ldaa #100 ; load 100 into accumulator A + suba LEVEL ; Subtract LEVEL to get off count +offDelay tbeq A,doneLoop ; Test if A == 0, skip loop if so + jsr delay10usec ; delay 10 microseconds + deca ; decrement accumulator A by 1 + bra offDelay ; jump back to offDelay always +doneLoop pula ; restore A from the stack + rts ; return to caller ;************************************************************************* ; delay10usec subroutine diff --git a/cmpen472hw4_McDonnell/bin/Project.abs b/cmpen472hw4_McDonnell/bin/Project.abs Binary files differindex 2810115..c7cfa1a 100644 --- a/cmpen472hw4_McDonnell/bin/Project.abs +++ b/cmpen472hw4_McDonnell/bin/Project.abs diff --git a/cmpen472hw4_McDonnell/bin/Project.abs.s19 b/cmpen472hw4_McDonnell/bin/Project.abs.s19 index 82aa46b..44b157e 100644 --- a/cmpen472hw4_McDonnell/bin/Project.abs.s19 +++ b/cmpen472hw4_McDonnell/bin/Project.abs.s19 @@ -1,7 +1,7 @@ S0580000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437326877345F4D63446F6E6E656C6C5C62696E5C50726F6A6563742E6162734C S10630000036058E -S1233100CF310086F15A0386505A018664C6640440127A300216313A16313A16313A1631C6 -S12331203A4320EB0451E47A300216313A16313A16313A16313A425320EA4C018036B63092 -S12331400204400616315D4320F74D01808664B0300204400616315D4320F7323D34FE306E -S10A3160000926FD30A73D24 +S1233100CF310086F15A0386505A0186640440127A3002163138163138163138163138437B +S123312020EB816427E57A30021631381631381631381631384220EA4C018036B6300204AC +S1233140400616315B4320F74D01808664B0300204400616315B4320F7323D34FE3000096F +S108316026FD30A73D2F S9030000FC diff --git a/cmpen472hw4_McDonnell/bin/main.dbg b/cmpen472hw4_McDonnell/bin/main.dbg index 4154ae3..853722f 100644 --- a/cmpen472hw4_McDonnell/bin/main.dbg +++ b/cmpen472hw4_McDonnell/bin/main.dbg @@ -1,22 +1,22 @@ ************************************************************************** * -* Title: LED Light Dimmer +* Title: LED Light Dimmer Loop * -* Objective: CMPEN 472 Homework 3 +* Objective: CMPEN 472 Homework 4 * * Revision: V1.0 * -* Date: Feb. 5, 2025 +* Date: Feb. 14, 2025 * * Programmer: Jacob McDonnell * * Company: The Pennsylvania State University * Department of Computer Science and Engineering * -* Algorithm: Simple Parallel I/O use and time delay-loop demo +* Algorithm: Simple Parallel I/O use, time delay-loop, and PWM control * -* Register Use: A: LED Light on/off state and Switch 1 on/off state -* X: Delay loop counter +* Register Use: A to control LEDS initially and for Light Level +* X to hold the counter in the loop. * * Memory Use: RAM Locations from $3000 for data, * RAM Locations from $3100 for program @@ -32,8 +32,9 @@ * LED 3 at PORTB bit 6 * LED 4 at PORTB bit 7 * -* Observation: This program will dim the LED4 to either 5% when the -* switch is not pressed and 15% when the switch is pressed. +* Observation: This program will decrease LED 4 from 100% to 0% in 400ms +* and then increase LED 4 from 0% to 100% in 400ms. The program +* will loop forever. * * Note: ON CSM-12C128 board, * Switch 1 is at PORTB bit 0, and @@ -83,25 +84,24 @@ pgstart lds #$3100 ; initialize the stack pointer staa PORTB ; Turn on only LEDs 1 & 3 on PORTB mainLoop - ldaa #100 ; 1 ; load 100 into accumulator A - ldab #100 ; 1 ; load 100 into accumulator B -decrease tbeq A,increase ; 3 ; Test if A == 0, skip loop if so - staa LEVEL ; 3 ; store A in counter LEVEL - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - deca ; 1 ; decrement accumulator A by 1 - bra decrease ; 3 ; loop to decrease always -increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoop if so - staa LEVEL ; 3 ; store A in counter LEVEL - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine - inca ; 1 ; increment accumulator A by 1 - decb ; 1 ; decrement accumulator B by 1 - bra increase ; 3 ; loop to increase always + ldaa #100 ; load 100 into accumulator A +decrease tbeq A,increase ; Test if A == 0, skip loop if so + staa LEVEL ; store A in counter LEVEL + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + deca ; decrement accumulator A by 1 + bra decrease ; loop to decrease always +increase cmpa #100 ; Compare A to 100 + beq mainLoop ; Test if A == 100, jump to mainLoop + staa LEVEL ; store A in counter LEVEL + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + jsr dimmer ; jump to dimmer subroutine + inca ; increment accumulator A by 1 + bra increase ; loop to increase always ************************************************************************** * Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory @@ -122,22 +122,22 @@ increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoo ; dimmer - bset PORTB,%10000000 ; 6 ; Turn LED4 on - psha ; 2 ; Save A to the stack - ldaa LEVEL ; 3 ; Load the light level into accumulator A -onDelay tbeq A, skipToOff ; 3 ; Test if A == 0, skip loop if so - jsr delay10usec ; 244 ; delay for 10 microseconds - deca ; 1 ; decrement accumulator A by 1 - bra onDelay ; 3, 1; jump back to onDelay always -skipToOff bclr PORTB,%10000000 ; 6 ; Turn off LED4 - ldaa #100 ; 1 ; load 100 into accumulator A - suba LEVEL ; 3 ; Subtract LEVEL to get off count -offDelay tbeq A,doneLoop ; 3 ; Test if A == 0, skip loop if so - jsr delay10usec ; 244 ; delay 10 microseconds - deca ; 1 ; decrement accumulator A by 1 - bra offDelay ; 3, 1; jump back to offDelay always -doneLoop pula ; 3 ; restore A from the stack - rts ; 5 ; return to caller + bset PORTB,%10000000 ; Turn LED4 on + psha ; Save A to the stack + ldaa LEVEL ; Load the light level into accumulator A +onDelay tbeq A, skipToOff ; Test if A == 0, skip loop if so + jsr delay10usec ; delay for 10 microseconds + deca ; decrement accumulator A by 1 + bra onDelay ; jump back to onDelay always +skipToOff bclr PORTB,%10000000 ; Turn off LED4 + ldaa #100 ; load 100 into accumulator A + suba LEVEL ; Subtract LEVEL to get off count +offDelay tbeq A,doneLoop ; Test if A == 0, skip loop if so + jsr delay10usec ; delay 10 microseconds + deca ; decrement accumulator A by 1 + bra offDelay ; jump back to offDelay always +doneLoop pula ; restore A from the stack + rts ; return to caller ;************************************************************************* ; delay10usec subroutine diff --git a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o Binary files differindex 2810115..c7cfa1a 100644 --- a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o +++ b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o diff --git a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx index fbb3fb6..581ede7 100644 --- a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx +++ b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx @@ -1,7 +1,7 @@ S0840000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437326877345F4D63446F6E6E656C6C5C636D70656E3437326877345F4D63446F6E6E656C6C5F446174615C5374616E646172645C4F626A656374436F64655C6D61696E2E61736D2E70726DD1 S10630000036058E -S1233100CF310086F15A0386505A018664C6640440127A300216313A16313A16313A1631C6 -S12331203A4320EB0451E47A300216313A16313A16313A16313A425320EA4C018036B63092 -S12331400204400616315D4320F74D01808664B0300204400616315D4320F7323D34FE306E -S10A3160000926FD30A73D24 +S1233100CF310086F15A0386505A0186640440127A3002163138163138163138163138437B +S123312020EB816427E57A30021631381631381631381631384220EA4C018036B6300204AC +S1233140400616315B4320F74D01808664B0300204400616315B4320F7323D34FE3000096F +S108316026FD30A73D2F S9033100CB diff --git a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt Binary files differindex ecf32b1..e7c73d0 100644 --- a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt +++ b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt |
