In theory:
Unit tests are written by programmers.
Acceptance tests are written by customers
When unit tests pass, write another test that fails.
When acceptance tests pass, stop coding. The job is done.
In reality:
The difference is not so clear-cut; and we can often use the same tools for either or both kinds of tests.
Acceptance tests become future unit tests; and vice versa