253 devices jbwyatt.com

.. Microcontrollers


An integrated circuit that contains many of the same items that a desktop computer has, such as CPU, memory, etc., Does NOT include any “human interface” devices like a monitor, keyboard, or mouse. Microcontrollers are small (micro) and designed for machine control (controller) applications, rather than human interaction. ** Microcontroller IMAGES
WorldWide Microcontroller Shipments (in millions of dollars $) '94 '95 '96 '97 '98 '99 '00 4-bit $1,761 1,826 1,849 1,881 1,856 1,816 1,757 8-bit 4,689 5,634 6,553 7,529 8,423 9,219 9,715 16-bit 810 1,170 1,628 2,191 2,969 3,678 4,405 (2006) A new comprehensive analysis on the Microcontroller market predicts that 2007 worldwide microcontroller revenue will increase by 10 percent.
Average Semiconductor Content per Automobile (in dollars $) '94 '95 '96 '97 '98 '99 '00 $ 1,068 1,237 1,339 1,410 1,574 1,852 2,126 (2007)High growth application areas for automotive semiconductors include safety (airbags, cruise control, collision avoidance, antilock brakes) and cockpit electronics (entertainment, telematics, instrumentation, phones). Electrical and electronics content, including software, represents around 20%+ of the cost of the average vehicle.
Examples: controlling traffic lights CD players simple game consoles many children's games TV remote controls microwave oven timers clock radios car engine management systems central heating controllers environmental control systems

.. Devices and I/O Ports

Intel microprocessors use port-mapped I/O - separate set of assembly instructions (IN, OUT) - port # determines which hardware device to communicate with - allow 1 or 2 bytes to be sent/received - meaning of data is TOTALLY determined by device
EMU8086: can emulate a microcontroller by controlling external devices

.. Using the LED display

org 100h ; this example shows how to access virtual ports (0 to 65535). ; these ports are emulated in this file: c:\emu8086.io ; this technology allows to make external add-on devices ; for emu8086, such as led displays, robots, thermometers, stepper-motors, etc.. ; anyone can create an animated virtual device. ; c:\emu8086\devices\led_display.exe #start=led_display.exe# ; loop to write ; values to port: mov cx, 1000 mov ax, 0 out 199, ax ; set LED to 00000 x1: call LED inc ax loop x1 ret ;========================================= ; USES the AX register ; procedure outputs ax to LED Led PROC ; save all pusha ; write to LED: out 199, ax ;restore all popa ret ; return to the caller Led ENDP ;========================================== end

.. Using the Traffic Lights

org 100h ; this example shows how to access virtual ports (0 to 65535). ; controlling external device with 8086 microprocessor. ; realistic test for c:\emu8086\devices\Traffic_Lights.exe #start=Traffic_Lights.exe# name "traffic" mov ax, all_red out 4, ax mov si, offset situation next: mov ax, [si] out 4, ax ; wait 5 seconds (5 million microseconds) mov cx, 4Ch ; 004C4B40h = 5,000,000 mov dx, 4B40h mov ah, 86h int 15h add si, 2 ; next situation cmp si, sit_end jb next mov si, offset situation jmp next ; FEDC_BA98_7654_3210 situation dw 0000_0011_0000_1100b s1 dw 0000_0110_1001_1010b s2 dw 0000_1000_0110_0001b s3 dw 0000_1000_0110_0001b s4 dw 0000_0100_1101_0011b sit_end = $ all_red equ 0000_0010_0100_1001b

.. Using the Stepper Motor

org 100h #start=stepper_motor.exe# steps = 10h ; 16(decimal) jmp start ; bin data for clock-wise ; half-step rotation: datcw db 0000_0110b db 0000_0100b db 0000_0011b db 0000_0010b ; bin data for counter-clock-wise ; half-step rotation: datccw db 0000_0011b db 0000_0001b db 0000_0110b db 0000_0010b stop db 0000_0000b start: lea bx, datcw ; start from clock-wise half-step. mov si, 0 mov cx, 0 ; step counter next_step: ; motor sets high bit when it's ready to accept new command wait: in al, 7 test al, 10000000b jz wait mov al, [bx][si] ;!SEE memory access modes out 7, al inc si cmp si, 4 ; why 4?? jb next_step mov si, 0 inc cx cmp cx, steps ; why not 4? jb next_step mov cx, 0 add bx, 4 ; next bin data cmp bx, offset datccw jbe next_step ; mov bx, offset datcw ; keep repeating ; jmp next_step ret end