you've got me -
the code is legit no malware
the code is available with current kit based speed alert devices but I need to modify it for a personal project. I just Downloaded MPLAB today and ran the first couple of instructions and found a list of errors. I was expecting everything to be in order:
Heres the code in full:
part 1:
Code:
; File SPEED254.ASM changes from SPEED.ASM to allow speed readings up to 254km/h
; Uses assembly code for PIC16F84 microcontroller
; This program is for a car speed alarm. It utilises three 7-segment displays
; which show the set speed. The speed setting can be altered with up and down pushbutton
; switches from 0 to 255km/h in 5km/h steps. When the speed of the vehicle reaches the set speed,
; the alarm sounds and an LED lights up. The alarm is a short beep beep sound while the LED
; remains lit until the speed is reduced below the alarm speed or the alarm speed is increased
; above the vehicles speed.
;
; A rotating magnet or magnets installed on the vehicles tail shaft or drive shaft
; trigger an inductive (coil) sensor to detect vehicle speed and this signal is detected via
; an interrupt in the processor.
;
; Calibration can be made by setting an alarm speed on the display and then bringing the
; vehicle speed up to the alarm speed as shown on the vehicles speedometer.
; The Calibrate switch is then pressed. The display will show CAL until
; calibrated. Display will show Err (error) if too few pulses or none are present while calibrating.
; No calibration allowed in speedometer mode.
;
; Each pressing the Mode switch will cycle between alarm speed indication, speedometer
; and off which disables the speed alarm.
;
; Alarm indication occurs for speedometer and alarm speed modes.
;
; Pressing the Up switch at power up will set the speed alarm for either a
; repeat warning of overspeed or single alarm. The repeat alarm will produce a tone every
; 10-seconds until the speed goes below the setting or the speed setting is increased above
; the speed.
;
; When pressing the Up switch at power up, a 'r' on the right display indicates repeat
; alarm and a '-' indicates no-repeat alarm option.
;
; Pressing the Mode switch at power up will toggle the speed alarm with the speedometer on or off
; If the display shows an 'S' then the speedometer function will operate and a '-' indicates that
; the speedometer is off.
;
; Pressing the Down switch at power up will set the speed alarm threshold point either high or
; low. The low threshold means that the alarm will sound at the set speed and switch off
; when the speed goes 1km/h or less below this speed. The high threshold will set the alarm
; when the speed is 1km/h or more above the set speed and go off for speeds at or below the
; set speed. A high setting will be indicated by an 'H' and a low setting by an 'L'as shown during
; power up with the down switch pressed.
;
; Processor pin allocations are as follows:
; RA0 Output disp1 driving transistor for common anode display
; RA1 Output disp2
; RA2 Output disp3
; RA3 Output for alarm
; RA4 Input from switches
; RB0 Input for wheel sensor (interrupt)
; RB1 c segment drive for seven segment LED display
; RB2 d segment drive
; RB3 e segment drive
; RB4 f segment drive
; RB5 a segment drive
; RB6 b segment drive
; RB7 g segment drive
; CPU configuration
;
list P=16F84
#include "p16f84.inc"
__config _XT_OSC & _WDT_OFF & _PWRTE_ON
; Define variables at memory locations
; EEPROM DATA
EEPROM1 equ H'00' ; non-volatile storage for display1
EEPROM2 equ H'01' ; non-volatile storage for display2
EEPROM3 equ H'02' ; non-volatile storage for display3
EEPROM4 equ H'03' ; non-volatile storage to toggle repeat alarm feature and mode
EEPROM5 equ H'04' ; non-volatile storage of LS byte of calibration number
EEPROM6 equ H'05' ; non-volatile storage of MS byte of calibration number
; RAM
DISP1 equ H'0C' ; working storage for Display1 value alarm speed mode
DISP2 equ H'0D' ; working storage for Display2 value alarm speed mode
DISP3 equ H'0E' ; working storage for Display3 value alarm speed mode
STATUS_TMP equ H'0F' ; temp storage for status during interrupt
W_TMP equ H'10' ; temporary storage for w during interrupt
VALUE_1 equ H'11' ; delay value storage
VALUE_2 equ H'12' ; delay value storage
FLAG_1 equ H'13' ; flag, bit 0 = flag for closed switch, bit 1 for interrupt indicator
; bit 2 for alarm tone required, bit 3 for tone duty cycle,
; bit 4 alarm off, bit 5 overspeed, bit 6 EEPROM
; write repeat number, bit 7 for calibrate flag
FLAG_2 equ H'14' ; alarm tone period settable from 00-FE
FLAG_3 equ H'15' ; alarm tone sequence 00000000=on,00000001=off,00000010=on >=00000011 off,
; use a more significant bit to set reocurrence, bit 6 or 7
REPEAT equ H'16' ; bit 0 working store repeat alarm flag stored in EEPROM4, bit 1 on/off flag
; bit 1 on/off flag, bit 2 speedo/alarm select flag, bit 3 speedo on/off flag
; bit 4 alarm threshold
SPEED_EQV equ H'17' ; storage for speed equivalent (value of 5 per 5km/h) 160km/h=160
TEMP_1 equ H'18' ; temporary working storage
TEMP_2 equ H'19' ; temp storage
TIME_CNT1 equ H'1A' ; counter for pulse count period
TIME_CNT2 equ H'1B' ; counter for pulse count period
TIME_CNT3 equ H'1C' ; working lsb calibration number stored in EEPROM5
TIME_CNT4 equ H'1D' ; working msd calibration number stored in EEPROM6
PULSE_CNT equ H'1E' ; counter for speed pulses compared with speed_eqv
ERR_FLG equ H'1F' ; bit 0 is error flag for counter overrange during calibration
SPEEDO equ H'20' ; latched value for speedometer obtained from PULSE_CNT
SPEED1 equ H'21' ; display1 value during speedometer mode
SPEED2 equ H'22' ; display2 value during speedometer mode
SPEED3 equ H'23' ; display3 value during speedometer mode
TEMP equ H'24' ; temporary register for BCD conversion
BCD_0 equ H'25' ; decimal value MSD
BCD_1 equ H'26' ; decimal packed BCD LS digits
BIN_0 equ H'27' ; binary value for BCD conversion
CNT_8 equ H'28' ; counter for BCD conversion
TEMP_X equ H'29' ; temporary register for speed equivalent calculation
; preprogram EEPROM DATA
ORG 2100
DE 0x00, 0x06, 0x00 ; preset EEPROM1-EEPROM3 ( initial speed setting is 60)
DE 0x03 ; set EEPROM4 (repeat alarm on bit 0 and set to on/off bit 1)
; bit 2 speedo/set bit to set alarm mode, bit 3 speedo on
; bit 4 alarm threshold low
DE 0xB3, 0x11 ; set calibration EEPROM5 & EEPROM6 (set to 100Hz = 160km/h
; calibration calculated out at 1.6s update time 160km/h = 160 pulses counted.
; 3.579545MHz/4/2/(256-100+2) = 353.1175us and require 4531Decimal for 1.6 sec or 11B3Hex
; Program begins
; define reset and interrupt vector start addresses
org 0 ; start at address 0000h
goto MAIN ; normal service routines from Reset vector
org 4 ; interrupt vector 0004h, start interrupt routine here
goto INTER ; go to start of interrupt routine, bypass subroutines
; subroutine to get seven segment display data. (This is placed at front of programm to prevent computed
; goto crossing 256 bit boundary. *PCL control only over least significant 8-bits*)
SVNSEG andlw 0x0F; remove most significant bits if present prevents value >16h
addwf PCL,f ; add value of display to program counter
retlw B'10000000' ; 7-segment code 0
retlw B'10111100' ; 7-segment code 1
retlw B'00010010' ; 7-segment code 2
retlw B'00011000' ; 7-segment code 3
retlw B'00101100' ; 7-segment code 4
retlw B'01001000' ; 7-segment code 5
retlw B'01000000' ; 7-segment code 6
retlw B'10011100' ; 7-segment code 7
retlw B'00000000' ; 7-segment code 8
retlw B'00001000' ; 7-segment code 9
;*******************************************************************************************
- if need be i'll contact the developers website on why their code is ridden with bugs. Thanks for look at it.
Bookmarks