TAMS / Java / Hades / applets: contents | previous | next | ||||
Hades Applets contents visual index introduction std_logic_1164 gatelevel circuits delay models flipflops adders and arithm... counters LFSR and selftest memories programmable logic state-machine editor misc. demos I/O and displays DCF-77 clock relays (switch-le... CMOS circuits (sw... RTLIB logic RTLIB registers Prima processor D*CORE MicroJava Pic16 cosimulation PIC16C84 dem... fast PIC16C8... interrupt-dr... on-chip timer EEPROM access EEPROM access RS-232 trans... software RS-232 software RS-... chronograph MIDI footswi... MIDI footswi... MIDI footswi... MIDI organ p... MIDI organ p... ultrasonic r... ultrasonic r... "Phrasendres... "mastermind"... Mips R3000 cosimu... Intel MCS4 (i4004) image processing ... [Sch04] Codeumsetzer [Sch04] Addierer [Sch04] Flipflops [Sch04] Schaltwerke [Sch04] RALU, Min... [Fer05] State-Mac... [Fer05] PIC16F84/... [Fer05] Miscellan... [Fer05] Femtojava FreeTTS | PIC16C84 microcontroller demonstration (nightrider)
Circuit Description
A first and very simple demonstration of our
PIC 16C84 microcontroller simulation model.
The program loaded into the microcontroller just drives a few LEDs
connected to its port B outputs in 'nightrider' fashion.
This design is also a very good start to play with a real
PIC16C84 microcontroller on a prototyping bread-board.
Just program the microcontroller with the
walk.hex file,
add some LEDs, and switch on the power!
If the applet seems to be running very slowly,
you might want to switch-off glow-mode in the Hades editor,
because the simulator performance will often be limited
by the frequent repaint requests to the clock signal.
Use the popup-menu (popup, edit-component) to open the microcontroller
user-interface and watch the program execution.
You can also edit the data and program memories while the simulation
is running.
The following image shows a screenshot of the PIC microcontroller
user-interface:
The right part of the window shows the program memory with addresses, raw memory data, and disassembled instructions. You can click the leftmost column to set and clear program breakpoints. The current intruction is highlighted in green color. The left part of the window shows (from top to bottom) the data memory, on-chip EEPROM memory, internal subroutine stack, and the current values of the four most important registers (work register, program-counter, status register, interrupt control). All special-function registers in the PIC architecture are directly memory-mapped into the data-memory. If you want to change the memory contents or a register value, just type-in new hex-values into the data memory. However, note that the simulation runs very slowly while the PIC GUI window is open and enabled, because most of the processor time is spent redrawing the processor register and memory windows. Uncheck the 'update' checkbox to disable redrawing of the registers to watch the simulation at normal speed. The speed of the nightrider animation depends on the wait loops in the PIC microcontroller program, whose limits were set during assembly. If the simulation runs too slow (or fast :-)), you can edit the assembly code and re-assemble, or open the microcontroller GUI and change the values of the wait loop initialization manually. The correspondingmovlw C8 instructions are
at program addresses 00F and 001
and load the value C8 first into the W register.
You can change those instructions to something like movlw 10
to reduce the wait counter initialization value,
which makes the animation much faster.
For reference, here is the original program: ;******************************************************************* ; walk.asm ; ; This code walks LEDs backwards and forwards on port b. ; Couldn't be simpler. ;******************************************************************* LIST P=16C84;f=inhx8m _CP_OFF equ H'3FFF' ;code protect off _PWRTE_ON equ H'3FFF' ;Power on timer on _WDT_OFF equ H'3FFB' ;watch dog timer off _XT_OSC equ H'3FFD' ;crystal oscillator __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;configure programmer directive w equ 0 ; register destination numbers. f equ 1 same equ 1 z equ 2 ; status flags zero equ 2 c equ 0 carry equ 0 count1 equ 0C ; wait counter ls digit file register C count2 equ 0D ; wait counter ms digit file register D portb equ 06 ; port b I/O register f6 porta equ 05 ; port a I/O register f5 status equ 03 ; status register f3 ; ; ; org 0 ; origin ; init movlw 0 tris portb ; set portb as outputs movwf portb ; set portb levels all low start bsf portb,0 ; set portb bit 0 high rot_L call wait ; wait for a bit bcf status,c ; clear carry bit rlf portb,same ; rotate left portb, store result portb btfss portb,7 ; skip next line if top bit set goto rot_L rot_R call wait ; wait for a bit bcf status,c ; clear carry bit rrf portb,same ; rotate right portb, store in portb btfss portb,0 ; skip next line if bottom bit set goto rot_R goto rot_L ; do it all again ; ---------------------------- ; wait subroutine ; ---------------------------- wait movlw .200 ; load count1 with decimal 200 movwf count1 d1 movlw .200 ; load count2 with decimal 200 movwf count2 ; shorten these for the simulator d2 decfsz count2,same ; decrement and skip next line if zero goto d2 ; if not zero decfsz count1 ; decrement count1 if count2 is zero goto d1 ; do inside loop again if count2 nz retlw 00 ; ---------------------------- END | |||
Print version | Run this demo in the Hades editor (via Java WebStart) | ||||
Usage | FAQ | About | License | Feedback | Tutorial (PDF) | Referenzkarte (PDF, in German) | ||||
Impressum | http://tams.informatik.uni-hamburg.de/applets/hades/webdemos/72-pic/05-walk/walk.html |